如何在同一请求中查询具有不同查询词的两个不同字段。弹性搜索 5.x

How to query two different fields with different query terms in same request. ElasticSearch 5.x

ElasticSearch 的新手 - 开始爱上它。我正在开发一个 Rails 应用程序(使用 elasticsearch-rails / elasticsearch-model)。

我有两个字段 - 都是由标签组成的字符串。

about_me & about_you

这有意义吗?就像两个字段,两个查询,每个查询都针对一个特定的字段。

我只需要提示如何在 ES 中实现这一点。为了完整起见,这是我在 rails 模型中创建的部分方法 - 它不完整:

def home_search(query_you, query_me)
  search_definition =
      {
          query: {
              multi_match: {
                  query: query_me,
                  fields: ['about_you']
              }
              ..... SOMETHINGs MISSING HERE ..... ?
          },
          suggest: {
              text: query,
              about_me: {
                  term: {
                      size: 1,
                      field: :about_me
                  }
              },
              about_you: {
                  term: {
                      size: 1,
                      field: :about_you
                  }
              }
          }
      }
  self.class.__elasticsearch__.search(search_definition)
end

欢迎任何帮助,link 或捐款。谢谢!

我不确定我是否理解你的问题,但我可以建议两个选项:
首先使用 shouldminimum_should_match=1 类型的 bool query。在这种情况下,您可以为您的搜索编写两个查询。如果你想区分结果,你可以在每个查询中传递一个 _name 参数。像这样:

{
   "query": {
      "bool": {
         "minimum_should_match": 1,
         "should": [
            {
               "multi_match": {
                  "query": "query_me",
                  "fields": [
                     "about_you"
                  ],
                  "_name": "about_you"
               }
            },
            {
               "multi_match": {
                  "query": "query_you",
                  "fields": [
                     "about_me"
                  ],
                  "_name": "about_you"
               }
            }
         ]
      }
   }
}

通过提供 _name,您可以查看在搜索结果中命中了哪些查询。 第二种方法可以是 _msearch 查询,您可以在其中将多个查询传递到端点并取回结果。 以下是一些有用的链接:

Bool Query
Named Queries