ruby-on-rails - ruby 中具有多个multi_match查询的Elasticsearch DSL

标签 ruby-on-rails ruby json elasticsearch elasticsearch-rails

我有这种情况,其中在同一查询中有两个multi_match搜索。问题是,当我在ruby中为其创建JSON时,似乎无法实现具有非唯一键的json,因此只能显示其中一个。

这是我的查询:

{
    "fields": ["id", "title", 
    "address.city", "address.state", "address.country", "address.state_code", "address.country_code", "proxy_titles", "location"],
    "size":2,
    "query":{
        "filtered":{
            "filter": {
                "range": {
                    "custom_score": {
                        "gte": 100
                    }
                }
            },
            "query":{
                "bool": {
                    "must": {
                        "multi_match":{
                            "query": "term 1",
                            "type": "cross_fields",
                            "fields": ["title^2", "proxy_titles^2","description"]
                        }
                    },
                    "must": {
                        "multi_match": {
                            "query": "us",
                            "fields": ["address.city", "address.country", "address.state",
                            "address.zone", "address.country_code", "address.state_code", "address.zone_code"]
                        }
                    }
                }
            }
        }
    },
    "sort": {
        "_score": { "order": "desc" },
        "variation": {"order": "asc"},
        "updated_at": { "order": "desc" }
    }
}

我也是最近才开始使用elasticsearch,因此如果您可以建议我做一个更好的查询来完成同样的事情,这将非常有帮助。

最佳答案

您的语法错误。对于"must"中的多个"bool"值,它们必须位于数组中。不幸的是,该文档并不总是很有帮助(bool query page表示"should"而不显示"must")。

试试这个:

{
   "fields": ["id","title","address.city","address.state","address.country","address.state_code","address.country_code","proxy_titles","location"],
   "size": 2,
   "query": {
      "filtered": {
         "filter": {
            "range": {
               "custom_score": {
                  "gte": 100
               }
            }
         },
         "query": {
            "bool": [
               {
                  "must": {
                     "multi_match": {
                        "query": "term 1",
                        "type": "cross_fields",
                        "fields": ["title^2","proxy_titles^2","description"]
                     }
                  }
               },
               {
                  "must": {
                     "multi_match": {
                        "query": "us",
                        "fields": ["address.city","address.country","address.state","address.zone","address.country_code","address.state_code","address.zone_code"]
                     }
                  }
               }
            ]
         }
      }
   },
   "sort": {
      "_score": {
         "order": "desc"
      },
      "variation": {
         "order": "asc"
      },
      "updated_at": {
         "order": "desc"
      }
   }
}

关于ruby-on-rails - ruby 中具有多个multi_match查询的Elasticsearch DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32671821/

相关文章:

ruby-on-rails - Rails 安全性 : Avoiding mass-assignment altogether

ruby-on-rails - 使用 simplecov 的 Ruby on Rails 测试覆盖率

javascript - 使用 jquery 嵌套 Json 数据

c++ - Qt : from unsigned long long to QJsonObject

javascript - 从 JSON 返回的数据中获取值

文件管理器的 javascript/部分逻辑

javascript - 如何将长链接替换为短链接?

ruby-on-rails - 检测 rails 2 应用程序

ruby - 如何从 Ruby 脚本打开 Firefox 和多个选项卡?

ruby-on-rails - rails console - 在表格中显示事件记录结果