Elasticsearch - 搜索API

此API用于搜索Elasticsearch中的内容.用户可以通过在post请求的消息体中发送带有查询字符串作为参数或查询的get请求来进行搜索.主要是所有搜索APIS都是多索引,多类型.

多指数

Elasticsearch允许我们搜索所有文档中存在的文档指数或某些特定指数.例如,如果我们需要搜索包含中心名称的所有文档.

GET http://localhost:9200/_search?q = name:central

回复

{
   "took":78, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0},
   "hits":{
      "total":1, "max_score":0.19178301, "hits":[{
         "_index":"schools", "_type":"school", "_id":"1", "_score":0.19178301,
         "_source":{
            "name":"Central School", "description":"CBSE Affiliation", 
            "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
            "location":[31.8955385, 76.8380405], "fees":2000, 
            "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
         }
      }]
   }
}

或者,我们可以在学校,学校_gov指数中搜索相同的内容;

GET http://localhost:9200/schools,schools_gov/_search?q = name:model

Multi-Type

We can also search all the documents in an index across all types or in some specified type. For example,

Get http://localhost:9200/schools/_search?q = tags:sports

Response

{
   "took":16, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0},
   "hits":{
      "total":1, "max_score":0.5, "hits":[{
         "_index":"schools", "_type":"school", "_id":"2", "_score":0.5,
         "_source":{
            "name":"Saint Paul School", "description":"ICSE Afiliation", 
            "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", 
            "location":[28.5733056, 77.0122136], "fees":5000, 
            "tags":["Good Faculty", "Great Sports"], "rating":"4.5"
         }
      }]
   }
}

URI Search

使用统一资源标识符可以在搜索操作中传递许多参数:

Sr.NoParameter & Description
1

Q

This parameter is used to specify query string.

2

lenient

Format based errors can be ignored by just setting this parameter to true. It is false by default.

3

fields

This parameter helps us to get response from selective fields.

4

sort

We can get sorted result by using this parameter, the possible values for this parameter is fieldName, fieldName:asc/fieldname:desc

5

timeout

We can restrict the search time by using this parameter and response only contains the hits in that specified time. By default, there is no timeout.

6

terminate_after

We can restrict the response to a specified number of documents for each shard, upon reaching which the query will terminate early. By default, there is no terminate_after.

7

from

The starting from index of the hits to return. Defaults to 0.

8

size

It denotes the number of hits to return. Defaults to 10.

Request Body Search

我们还可以在请求正文中使用查询DSL来指定查询,在前面的章节中已经给出了很多示例,例如:

POST http://localhost:9200/schools/_search

Request Body

{
   "query":{
      "query_string":{
         "query":"up"
      }
   }
}

Response

……………………………………………….
{
   "_source":{
      "name":"City School", "description":"ICSE", "street":"West End",
      "city":"Meerut", "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
      "fees":3500, "tags":["Well equipped labs"],"rating":"4.5"
   }
}
……………………………………………….