【问题标题】:Elasticsearch token position relevance to scoring?Elasticsearch 令牌位置与评分相关吗?
【发布时间】:2017-12-23 01:51:27
【问题描述】:

令牌位置对得分的重要性是什么? 我希望当令牌与位置 1 中的令牌匹配时,结果中返回的令牌高于位置 2 中的令牌。

我有一个索引 橙色椰子苹果 椰子橙苹果 椰子苹果橙 椰红橙

使用匹配查询搜索单词“coconut”。

在这些位置返回 1个橙色椰子苹果 2椰子红橙 3个椰子橙苹果 4个椰子苹果橙

我希望看到橙色椰子苹果获得第四名。

为什么会发生这种情况,我可能缺少什么解决方案/设置?

谢谢

PUT name
{
  "template": "name*",
  "mappings": {
    "name": {
      "_all": {
        "enabled": false
      },
      "properties": {
        "name": {
          "type": "text",
          "analyzer": "standard"
        }
      }
    }
  }
}

PUT name/name/1
{ 
    "name" : "orange coconut apple"
}
PUT name/name/2
{ 
    "name" : "coconut orange apple"
}
PUT name/name/3
{ 
    "name" : "coconut red orange"
}
PUT name/name/4
{ 
    "name" : "coconut apple orange"
}

GET name/_search
{
    "query": {
        "match" : { "name" : "coconut" }
    }
}

【问题讨论】:

    标签: elasticsearch position token


    【解决方案1】:

    尝试在布尔查询中使用match phrase query,其中您的上述查询是must 子句,而匹配短语查询是should 子句。

    解释检查Elasticsearch - The definitive guide

    我强烈建议阅读整个search in depth 章节,因为这清除了很多控制查询相关性的问题,这些问题并不明显。

    【讨论】:

    • 谢谢@alr,我会阅读这些部分你的意思是这样吗?如果是这样,它不会改变顺序。 GET name/_search { "query": { "bool": { "must": [ { "match" : { "name" : "coconut" } } ], "should": [ { "match_phrase" : { "name" : "coconut" } } ] } } }
    • 哦,对不起,我误读了您的查询,并认为它包含两个词。除非您进行邻近度/短语查询,否则不考虑位置。您可以查看 span query family 并在 should 子句中使用它。
    猜你喜欢
    • 2012-02-16
    • 2017-03-04
    • 2016-11-18
    • 2020-06-22
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2017-06-27
    相关资源
    最近更新 更多