0

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

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

about_me & about_you

  • 现在我要用当前用户 about_me 查询另一个用户的 about_you。
  • 同时我想用当前用户的about_you查询其他用户的about_me。

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

我只需要提示如何在 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

欢迎任何帮助、链接或捐赠。谢谢!

4

1 回答 1

1

我不确定我是否理解您的问题,但我可以建议两个选项:
首先使用 abool query类型shouldminimum_should_match=1. 在这种情况下,您可以为您的搜索编写两个查询。如果你想区分结果,你可以_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查询,您可以在其中将多个查询传递到端点并取回结果。以下是一些有用的链接:

布尔查询
命名查询

于 2017-05-13T05:17:43.677 回答