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

时间:2013-08-28 07:19:12

标签: elasticsearch query-string term elastica

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

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

5 个答案:

答案 0 :(得分:26)

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

如下所示:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "field": "web developer"
          }
        },
        {
          "match_phrase": {
            "field": "web developer",
            "boost": 5
          }
        }
      ],
      "minimum_number_should_match": 1
    }
  }
}

答案 1 :(得分:7)

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

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

未经测试,但我相信此处的must子句会匹配包含 'web'和'developer'的结果,而should子句将对与'web developer'匹配的短语进行评分'更高。

答案 2 :(得分:2)

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

"通过重新排序查询和post_filter阶段返回的顶级(例如100-500)文档,使用辅助(通常更昂贵)算法,而不是将昂贵的算法应用于重新排序,有助于提高精度索引中的所有文档。"

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html

答案 3 :(得分:1)

我在我的案例中使用了以下示例查询,这是有效的。它带来了精确+模糊的结果,但精确的结果得到了提升!

{ "query": {
"bool": {
  "should": [
    {
      "match": {
        "name": "pala"
      }
    },
    {
      "fuzzy": {
        "name": "pala"
      }
    }
  ]
}}}

答案 4 :(得分:0)

我认为它的默认行为已经与匹配查询"或"运营商。它将过滤短语" web开发者"首先,然后像" web"或" develeper"。虽然您可以使用上述答案来提升您的查询。如果我错了,请纠正我。