22

elasticsearch 有没有办法提高文档中出现的确切短语的重要性?

例如,如果我正在搜索短语“web developer”,并且如果“web developer”这两个词一起出现,那么与在整个文档中分别出现的“web”和“developer”相比,它们将被提升 5。因此,任何包含“web developer”的文档都将首先出现在结果中。

4

6 回答 6

30

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

类似于以下内容:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field": "web developer"
          }
        },
        {
          "match_phrase": {
            "field": "web developer",
            "boost": 5
          }
        }
      ],
      "minimum_number_should_match": 1
    }
  }
}
于 2013-08-28T11:24:17.803 回答
8

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

{
  "query": {
    "bool": {
      "must": {
          "match": {
            "field": "web developer",
            "operator": "and"
          }
      },
      "should": {
          "match_phrase": {
            "field": "web developer"
          }
      }
    }
  }
}

未经测试,但我相信must这里的子句将匹配包含 web”和“developer”的结果,并且该should子句将匹配“web developer”的短语得分更高。

于 2013-08-29T16:28:13.957 回答
3

您可以尝试使用 rescore 对您的初始结果运行完全匹配的词组。从文档:

“重新评分可以帮助提高精度,方法是仅对查询和 post_filter 阶段返回的顶部(例如 100 - 500 个)文档进行重新排序,使用次要(通常成本更高)算法,而不是将成本高昂的算法应用于索引中的所有文档。 "

https://www.elastic.co/guide/en/elasticsearch/reference/current/filter-search-results.html#rescore

于 2015-02-06T18:29:22.383 回答
1

我在我的情况下使用了下面的示例查询,它正在工作。它带来了精确 + 模糊的结果,但精确的结果得到了提升!

{ "query": {
"bool": {
  "should": [
    {
      "match": {
        "name": "pala"
      }
    },
    {
      "fuzzy": {
        "name": "pala"
      }
    }
  ]
}}}
于 2014-05-28T16:01:19.430 回答
0

我认为它的默认行为已经与匹配查询“或”运算符一起使用。它将首先过滤短语“web developer”,然后过滤诸如“web”或“develeper”之类的术语。尽管您可以使用上述答案来提升您的查询。如我错了请纠正我。

于 2014-05-29T06:54:46.643 回答
0

我没有足够的声誉来评论James Adison 的回答,我同意。仍然缺少的是增强因子,可以使用以下语法来完成:

{
  "match_phrase": 
    {
        "fieldName": {
            "query": "query string for exact match",     
            "boost": 10
         }        

      }
}
于 2021-11-23T12:29:19.990 回答