在弹性搜索结果中搜索

时间:2017-09-12 08:37:21

标签: elasticsearch

是否可以在弹性搜索结果中搜索?

为了实现目前我需要运行&在elasticsearch上等待两次搜索:第一次搜索是

{ "match": { "title": "foo" } }

需要5秒钟并返回500个文档等。然后是第二次搜索

{
  "bool": {
    "must": [
      { "match": { "title": "foo" } },
      { "match": { "title": "bar" } }
    ]
  }
}

还需要5秒钟,然后返回200个文档,这与弹性搜索的第一次搜索无关。

我没有这样做,而是想在结果中进一步提供搜索"我的用户选项。希望通过此选项,用户可以根据第一次搜索返回的结果,使用更多关键字进行搜索。

所以我的方案是用户使用关键字" foo"进行第一次搜索,并在网页上获得500个结果,然后选择"在结果中进一步搜索",以在500个结果中进行第二次搜索,并希望能够快速得到一些精确的结果。

我怎样才能实现它?谢谢!

2 个答案:

答案 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将在执行查询结果。