是否可以在弹性搜索结果中搜索?
为了实现目前我需要运行&在elasticsearch上等待两次搜索:第一次搜索是
{ "match": { "title": "foo" } }
需要5秒钟并返回500个文档等。然后是第二次搜索
{
"bool": {
"must": [
{ "match": { "title": "foo" } },
{ "match": { "title": "bar" } }
]
}
}
还需要5秒钟,然后返回200个文档,这与弹性搜索的第一次搜索无关。
我没有这样做,而是想在结果中进一步提供搜索"我的用户选项。希望通过此选项,用户可以根据第一次搜索返回的结果,使用更多关键字进行搜索。
所以我的方案是用户使用关键字" foo"进行第一次搜索,并在网页上获得500个结果,然后选择"在结果中进一步搜索",以在500个结果中进行第二次搜索,并希望能够快速得到一些精确的结果。
我怎样才能实现它?谢谢!
答案 0 :(得分:2)
您可以使用IDS query
。从第一个请求中收集所有文档ID,然后使用新的Bool
查询发布,其中包含原始must
旁边的query
子句中的IDS查询。您可以使用Scroll API在第一个请求中有效地收集ID。由于您将返回已排序的第二个结果,因此在第一个请求中进行任何排序都没有意义,因此您可以加快第一个请求。
请参阅:
答案 1 :(得分:1)
post filter是一种在其他搜索中搜索的方式。
在你的情况下:
GET _search
{
"query": {
"match": {
"title": "foo"
}
},
"post_filter": {
"match": {
"title": "bar"
}
}
}
post_filter将在上执行查询结果。