Elasticsearch(八)| search(搜索)的进阶
在使用elasticsearch进程中,经常需要用到一些类似范围的搜索。
返回查询数量
当使用search的时候,默认只返回10条数据,可以通过size参数设置:
curl --cacert http_ca.crt -u elastic -XGET https://localhost:9200/test_record/_search?pretty -H 'Content-Type: application/json' -d '{"size":100,"query":{"match_all":{}}}'
如果正确就会返回test_record的100条数据:
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "test_record", "_id" : "vdoNN4QBHJgRqN7h6HeV", "_score" : 1.0, "_source" : { "date" : "2021-11-16T13:12:00", "counts" : 11, "key" : "中华人民共和国国徽" } }, { "_index" : "test_record", "_id" : "qjK5HIQB8xpN1Xtdy25q", "_score" : 1.0, "_source" : { "date" : "2021-12-15T14:12:00", "counts" : 2, "key" : "中华人民共和国国旗" } }, { "_index" : "test_record", "_id" : "qDK5HIQB8xpN1Xtdcm4P", "_score" : 1.0, "_source" : { "date" : "2021-10-16T13:12:00", "counts" : 0, "key" : "中华人民共和国" } }, { "_index" : "test_record", "_id" : "qTK5HIQB8xpN1Xtdm245", "_score" : 1.0, "_source" : { "date" : "2021-11-15T13:12:00", "counts" : 1, "key" : "中华人民共和国万岁" } }, { "_index" : "test_record", "_id" : "vNoNN4QBHJgRqN7h6HeV", "_score" : 1.0, "_source" : { "date" : "2021-11-15T13:12:00", "counts" : 3, "key" : "中华人民共和国国籍" } } ] } }
分页查询
使用数据库的时候,当查询结果太多的时候,可以用分页查询,在elasticsearch中也可以:
curl --cacert http_ca.crt -u elastic -XGET https://localhost:9200/test_record/_search?pretty -H 'Content-Type: application/json' -d '{"from":0,"size":2,"query":{"match_all":{}}}'
from就是起始位置,size就是每次取的数量。
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "test_record", "_id" : "vdoNN4QBHJgRqN7h6HeV", "_score" : 1.0, "_source" : { "date" : "2021-11-16T13:12:00", "counts" : 11, "key" : "中华人民共和国国徽" } }, { "_index" : "test_record", "_id" : "qjK5HIQB8xpN1Xtdy25q", "_score" : 1.0, "_source" : { "date" : "2021-12-15T14:12:00", "counts" : 2, "key" : "中华人民共和国国旗" } } ] } }
查询排序
使用sort可以对查询进行排序:
url --cacert http_ca.crt -u elastic -XGET https://localhost:9200/test_record/_search?pretty -H 'Content-Type: application/json' -d '{"from":0,"size":2,"query":{"match_all":{}},"sort":[{"counts":{"order":"desc"}}]}'
sort是一个数组类型的,可以实现对多个字段的综合排序
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ { "_index" : "test_record", "_id" : "vdoNN4QBHJgRqN7h6HeV", "_score" : null, "_source" : { "date" : "2021-11-16T13:12:00", "counts" : 11, "key" : "中华人民共和国国徽" }, "sort" : [ 11 ] }, { "_index" : "test_record", "_id" : "vNoNN4QBHJgRqN7h6HeV", "_score" : null, "_source" : { "date" : "2021-11-15T13:12:00", "counts" : 3, "key" : "中华人民共和国国籍" }, "sort" : [ 3 ] } ] } }
0