在搜索引擎中,索引建立完之后,只能算是完成了一部分,搜索引擎还涉及到分页,排序,显示等这一些问题,由于在elasticsearch中这些问题都涉及的比较好,实现起来比较简单,这里就一起介绍了。
1、分页
在elasticsearch中有两种分页查询的方法,一种叫做浅分页,一种叫做深分页。
浅分页
下面这个就是浅查询:
POST /_search
{
"size": 2,
"from": 10,
"query": {
"match_all": {}
}
}
其实单词的意思已经很明确了,但还是解释一下,size表示每一页显示2条数据,from表示从第10页开始,也就是说显示的信息是从20-22条数据。这里的排序使用的是默认评分排序。(惭愧,这个评分机制没有去研究)
这个实现的原理是将前22条数据都查询出来,然后根据需要将20-22条数据取出,很显然这种方式在查询页数很多的时候基本上就不能用了,如果查询第50000-50002条数据,需要将前50002数据都取出来,不管从空间还是从时间上都会爆炸的。
不同的博客有不同的说法,有的人说这种查询最多支持10000,也有说50000的,反正就是不能很大。
深分页
POST /_search?scroll=1m
{
"size": 4
}
这个就是深查询,采用scroll查询,这个查询结果会出现一个scroll_id,就是下面这个,scroll=1m表示这个scroll_id维持的时间是1分钟,如果这1分钟没有继续查询,那么这个id就会失效。
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoEAAAAAAAAC_zFl