1.说明
这个API用于在elasticsearch中搜索内容,用户可以通过发送以查询字符串为参数的get请求进行搜索,也可以在post请求的消息体中进行查询。
2.多索引
允许搜索所有的索引或某些特定索引中的文档。
例如:在多索引中搜索name中包含tom1的文档。
①在多索引中搜索
1 GET /index1,index2,index3/_search?q=name:tom1
效果:
1 { 2 "took" : 1, 3 "timed_out" : false, 4 "_shards" : { 5 "total" : 3, 6 "successful" : 3, 7 "skipped" : 0, 8 "failed" : 0 9 }, 10 "hits" : { 11 "total" : { 12 "value" : 2, 13 "relation" : "eq" 14 }, 15 "max_score" : 0.2876821, 16 "hits" : [ 17 { 18 "_index" : "index1", 19 "_type" : "_doc", 20 "_id" : "1", 21 "_score" : 0.2876821, 22 "_source" : { 23 "name" : "tom1", 24 "sex" : "M", 25 "address" : "SH" 26 } 27 }, 28 { 29 "_index" : "index2", 30 "_type" : "_doc", 31 "_id" : "1", 32 "_score" : 0.2876821, 33 "_source" : { 34 "name" : "tom1", 35 "age" : 20 36 } 37 } 38 ] 39 } 40 }
②全索引中搜索
可以不加_all
1 GET /_search?q=name:tom1
效果:
1 { 2 "took" : 4, 3 "timed_out" : false, 4 "_shards" : { 5 "total" : 9, 6 "successful" : 9, 7 "skipped" : 0, 8 "failed" : 0 9 }, 10 "hits" : { 11 "total" : { 12 "value" : 3, 13 "relation" : "eq" 14 }, 15 "max_score" : 0.2876821, 16 "hits" : [ 17 { 18 "_index" : "index1", 19 "_type" : "_doc", 20 "_id" : "1", 21 "_score" : 0.2876821, 22 "_source" : { 23 "name" : "tom1", 24 "sex" : "M", 25 "address" : "SH" 26 } 27 }, 28 { 29 "_index" : "index2", 30 "_type" : "_doc", 31 "_id" : "1", 32 "_score" : 0.2876821, 33 "_source" : { 34 "name" : "tom1", 35 "age" : 20 36 } 37 }, 38 { 39 "_index" : "school", 40 "_type" : "_doc", 41 "_id" : "1", 42 "_score" : 0.18232156, 43 "_source" : { 44 "name" : "tom1", 45 "sex" : "M", 46 "age" : "20" 47 } 48 } 49 ] 50 } 51 }
3.URL搜索
在2中的多索引示例中,其实使用的就是纯粹使用URI执行搜索请求。
在上文中使用的参数是q,下面还有一些请求参数可以使用,如下:
-
Q:用于指定搜索的字符串
-
lenient:若将此参数设置为true,就可以忽略基于格式的错误。默认情况下,它为false。
-
fields:该参数帮助我们从选择性字段中获得响应。
-
sort:我们可以通过使用这个参数改变排序结果,这个参数允许的值是字段名:ASC/字段名:desc
-
timeout:我们可以通过使用该参数来限制搜索时间,并且响应仅包含在指定时间内的命中。默认情况下,不指定timeout。
-
terminate_after:对于每个分片,我们可以将响应限制在指定数量的文档,一旦达到这个数量,查询将提前终止。默认情况下,不指定terminate_after。
-
from:从指定的索引开始返回. 默认为0.
-
size:表示要返回的记录数. 默认为10.
4.请求体查询
The search request can be executed with a search DSL, which includes the Query DSL, within its body。
意思是:
搜索请求可以使用包含查询DSL的搜索DSL,在其主体中执行