当我搜索文档时,我取前 10 个并将它们提供给 View ,如果用户滚动到列表末尾,应该显示接下来的 10 个元素。
我知道显示文档的最后一个文档 ID,现在我必须获取下一个 10。基本上我会执行完全相同的搜索,但偏移量为 10,但能够使用相同的搜索会更好查询,将最后检索到的文档的文档 id 放入其中,并在具有该 id 的文档之后检索匹配的文档。
用 elasticsearch 可以吗?
===更新
我想多指出一点我的问题,因为现在描述的好像还不够清楚。对此感到抱歉。
案例:
你有一种提要,提要每秒都会增长。如果用户转到提要,他会得到最近的 10 个条目,如果他向下滚动,他想得到接下来的 10 个条目。
因为提要每秒都在增长,通常的偏移量/限制( Elasticsearch 中的/大小)不能解决这个问题,你会显示已经显示的条目或全新的条目,这取决于第一次请求之间的时间(第一次10 个条目)和下一个条目的请求。
在已显示的条目之后获取下 10 个元素的请求为后端提供了最后显示的条目的 ID。后端知道忽略此特定条目之前的所有条目。
目前我正在用代码处理这个问题,我从 Elasticsearch 请求包含所有匹配条目的列表并对其进行迭代,这样我就可以做我想做的一切(毫不奇怪)并提取所需的整体 block 。
我的问题是:elasticsearch 中是否有针对此问题的内置解决方案。因为用我的方式解决问题并不是最快的。
最佳答案
老话题了,不过感觉elasticsearch 5.0以后就有的Search After API,做的正是需要的东西。提供您上一个文档的 ID 及其时间戳,例如:
GET twitter/tweet/_search
{
"size": 10,
"query": {
"match": {
"title": "elasticsearch"
}
},
"search_after": [
1463538857,
"tweet#654323"
],
"sort": [
{
"date": "asc"
},
{
"_uid": "desc"
}
]
}
来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-after.html
关于Elasticsearch 在特定文档 ID 之后获取匹配的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19852322/