乐趣区

关于elasticsearch:实践005elasticsearch的Search-API概览

[toc]


Search API 概览

1. Search API 分两种

  • URI Search: 在 URI 中应用查问参数
  • Request Body Search:应用 ES 提供的,基于 JSON 格局的更加齐备的 DSL:

    Query Domain Specific Language 查问畛域特定语言

2. 指定查问的索引

语法 范畴
/_search 集群上的所有 index
/index1/_search index1 上查问
/index1,index2/_search index1 和 index2
/index*/_search 通配符匹配:index 结尾的索引名相干的索引上查问

3. 查问数据筹备:ES 中的 usersindex 里的数据一览

_index _type _id ▲_score name age gender birth
users _doc 1 1 niewj 36 male 1985-01-01
users _doc 3 1 lifubo 33 male
users _doc 4 1 weibinbin 32 male
users _doc 2 1 nie 26 male 1995-02-02

4. URI 查问

4.1 curl 形式在命令行

应用 ”q”, 指定查问字符串;“query string syntax”, KV 键值对:

curl -XGET --user username:password "http://localhost:9200/users/_search?q=name:nie"

后果:

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.87546873,
        "hits": [
            {
                "_index": "users",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.87546873,
                "_source": {
                    "name": "nie",
                    "age": 26,
                    "gender": "male",
                    "birth": "1995-02-02"
                }
            }
        ]
    }
}

4.2 在 kibana DevTools 里:

GET /users/_search?q=name:nie

后果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.87546873,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.87546873,
        "_source" : {
          "name" : "nie",
          "age" : 26,
          "gender" : "male",
          "birth" : "1995-02-02"
        }
      }
    ]
  }
}

5.Request Body Search

反对 GETPOST

5.1 curl 形式在命令行

curl -XGET --user username:password "http://localhost:9200/users/_search"  -H 'Content-Type:application/json' -d '{"query":{"match":{"name":"nie"}}}'
  • username: 替换成本人的用户名
  • password:替换成本人的明码

后果:

{
    "took": 0,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.87546873,
        "hits": [
            {
                "_index": "users",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.87546873,
                "_source": {
                    "name": "nie",
                    "age": 26,
                    "gender": "male",
                    "birth": "1995-02-02"
                }
            }
        ]
    }
}

5.2 在 kibana DevTools 里

GET /users/_search
{
  "query": {
    "match": {"name": "nie"}
  }
}

后果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.87546873,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.87546873,
        "_source" : {
          "name" : "nie",
          "age" : 26,
          "gender" : "male",
          "birth" : "1995-02-02"
        }
      }
    ]
  }
}
退出移动版