【问题标题】:Elasticsearch two multi_match queriesElasticsearch 两个 multi_match 查询
【发布时间】:2019-09-17 12:04:24
【问题描述】:

我正在尝试搜索三个字段 namename.ngrammodel_number。我提升了name,所以name 上的任何匹配都高于name.ngram。但是,在某些情况下,name.ngram 与包含奇怪标点符号的术语不匹配,因此我想通过对 namemodel_number 字段字段的模糊搜索来完成我的查询。

这是我最终想要的查询。如果我删除第二个 multi_match,则查询有效,但不包括模糊搜索。

{
         explain: true,
         query:{
           function_score: { 
              "query": {
                "bool": {
                  "should": 
                    {
                      multi_match:{
                         fields: ["name^10", "name.ngram", "model_number"],
                         type: "most_fields",
                         query: "#{query}"
                       },
                       multi_match:{
                           fields: ["name", "model_number"],
                           type: "most_fields",
                           query: "#{query}",
                           fuzziness: "2"
                        }
                    },
                  "filter": {
                    "bool": { 
                      "must": filters
                    }
                  }
               }
             },field_value_factor:{
                    field: "popularity",
                    modifier: "log1p",
                    factor: 5

                 },
                 boost_mode: "sum"
             }
       },highlight: {
            fields: {
              :"*" => {}
            }
          },
        aggs: {categories: { terms: { field: "category.raw"} }} 

      } 

我想最终像处理 ngram 一样对待模糊搜索,以便非模糊匹配排名第一,模糊匹配排名第二。如何添加允许这样做的第二个 multi_match 查询?

【问题讨论】:

    标签: elasticsearch elasticsearch-rails


    【解决方案1】:

    您的bool/should 子句格式不正确,它应该是一个包含两个元素的数组,每个元素对应一个multi_match 约束,如下所示:

      ...
      "should": [
        {
          "multi_match": {
            "fields": [
              "name^10",
              "name.ngram",
              "model_number"
            ],
            "type": "most_fields",
            "query": "#{query}"
          }
        },
        {
          "multi_match": {
            "fields": [
              "name",
              "model_number"
            ],
            "type": "most_fields",
            "query": "#{query}",
            "fuzziness": "2"
          }
        }
      ]
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多