【问题标题】:ElasticSearch MultiMatch fields boosting doesn't seem to be working?ElasticSearch MultiMatch 字段提升似乎不起作用?
【发布时间】:2014-10-29 17:59:24
【问题描述】:

我正在尝试在 ElasticSearch 中进行关键字搜索。我最初使用的是这个:

{
"query": {
    "filtered": {
        "filter": {
            "and": [
                {
                    "fquery": {
                        "query": {
                            "query_string": {
                                "query": "Susan Sloan",
                                "default_operator": "AND"
                            }
                        }
                    }
                }
            ]
        }
    }
}

但是,我的客户希望 first_name 和 last_name 字段中的匹配项优先于其他字段中的匹配项,例如家庭成员;他们不喜欢 Name = "John Smith" 和 Spouse = "Susan Sloan" 在 Name = "Susan Sloan" 之前显示的结果。因此,我尝试将其更改为对 first_name 和 last_name 字段具有最大提升的多重匹配查询。

{
  "query": {
      "filtered": {
          "query": {
              "bool": {
                  "must": [
                      {
                          "multi_match": {
                              "fields": [
                                  "first_name^9",
                                  "last_name^9",
                                  "collection.name^7",
                                  "collection.category.name^7",
                                  "record_type.name^7",
                                  "location.city.name^7",
                                  "location.region.name^7",
                                  "location.country.name^7",
                                  "location.country.name^7",
                                  "relationships.first_name^7",
                                  "relationships.last_name^7",
                                  "attributes.name^1",
                                  "original_text^1"
                              ],
                              "query": "Susan Sloan",
                              "operator": "AND",
                              "type": "cross_fields"
                          }
                      }
                  ]
              }
          }
      }
  }
}

但是,提升似乎没有任何作用。尽管我有 first_name = "Susan" 和 last_name = "Sloan" 的记录,但我得到的第一个结果是“Abel Conant”,“Susan”和“Sloan”出现在 original_text 字段中。

【问题讨论】:

    标签: elasticsearch field match keyword


    【解决方案1】:

    使您的multi_match 类型为cross_fields

    "query": "Susan Sloan",
    "operator": "AND",
    "type": "cross_fields"
    

    【讨论】:

    • 我添加了这一点,但我仍然首先得到 original_text 匹配的结果。在我的原始帖子中编辑了我的查询
    • 那么我认为你需要单独测试你的这部分查询,看看它在更大的查询中是如何工作的。
    【解决方案2】:

    除了添加“type”:“cross_fields”,我还必须添加“analyzer”:“standard”

    【讨论】:

    • 好吧,我假设了默认设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2014-08-27
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多