elasticsearch提高了精确词组匹配的重要性

use*_*314 20 term query-string elasticsearch elastica

弹性搜索中是否有一种方法可以提高文档中出现的确切短语的重要性?

例如,如果我正在搜索短语"web开发人员",并且如果单词"web developer"一起出现,那么与在整个文档中单独出现的"web"和"developer"相比,它们将被提升5.因此,任何包含"web开发者"的文档将首先出现在结果中.

jav*_*nna 26

您可以使用bool查询将不同的查询组合在一起,您也可以对它们进行不同的提升.假设您对两个术语都有常规匹配查询,无论其位置如何,然后是具有更高提升的短语查询.

类似于以下内容:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field": "web developer"
          }
        },
        {
          "match_phrase": {
            "field": "web developer",
            "boost": 5
          }
        }
      ],
      "minimum_number_should_match": 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,当我想跨多个索引和一组不同的字段执行此类查询时会发生什么?据我所知,match_phrase仅适用于特定的字段名称.在我的情况下,我需要(一般来说)使用类似`{"query_string":{"query":"我的确切短语","字段":["typeA.fieldA","typeB.fieldB"]}}` (2认同)
  • [match_phrase] 查询不支持多字段 (2认同)

Jam*_*son 7

作为javanna回答的替代方法,您可以在查询中使用mustshould子句执行类似的bool操作:

{
  "query": {
    "bool": {
      "must": {
          "match": {
            "field": "web developer",
            "operator": "and"
          }
      },
      "should": {
          "match_phrase": {
            "field": "web developer"
          }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

未经检验的,但我相信must在这里子句会匹配结果 "网"和"开发商"和should条款将比分短语匹配"web开发"更高.