Elasticsearch:改进multi_match结果

时间:2018-05-09 09:57:30

标签: elasticsearch

您好我正在尝试搜索不同字段中的值。我正在使用multi_match和cross_fields类型。 这是查询

"query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "multi_match": {
                "query": "red cross",
                "type": "cross_fields",
                "fields": [
                  "name^20",
                  "keywords^12",
                  "description^1"
                ]
              }
            }
          ]
        }
      }
    }   }

我得到的结果是上面的查询

 "results": [
        {
            "name": "CrossPurpose",
            .....
        } ,
        {
            "name": "Community Center",
            "keywords": "American Red Cross,Red Cross,Center,Blood",
            . . .
          },
          {
             "name": "Some Group",
             "description":".... red cross ..."
          },
          .......
          ....
          ..
          {
             "name" : "Red cross" ,
              .....
          }
          ]

我想改进搜索结果。

我希望看到名字记录为#34;红叉"在第一个位置。   首先它应该匹配整个单词" red cross"那么只有它应该匹配" red" ,"交叉"。

我希望首选名称字段比关键字和描述更多。

请帮我改进查询。   提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要使用type = best_fields

所以你的查询将是

{
  "query": {
    "multi_match" : {
      "query":      "red cross",
      "type":       "best_fields",
      "fields":     [ "name", "keywords", "description" ],
      "tie_breaker": 0.3
    }
  }
}