【问题标题】:how to allow exact word match to have higher score如何让精确的单词匹配获得更高的分数
【发布时间】:2018-09-24 20:59:08
【问题描述】:

在弹性搜索中,我为“游泳”定义了两个同义词,如“玩耍”、“步行”。

假设我在弹性搜索中只有两个值"I like to swim""I like to play"

如果用户输入查询"I hope to play" 我希望它匹配“I like to play" 得分高于"I like to swim"(精确单词匹配(在本例中为play)得分更高),是否有如何实现?

【问题讨论】:

    标签: elasticsearch elasticsearch-5


    【解决方案1】:

    是的,你可以!

    您可以使用boolean query 实现任何您想要的提升

    全局概念,您将定义需要匹配的must 子句和可以匹配的should,从而提高您的文档分数。

    因此,根据您的需要,文档 needs 与同义词匹配,而 应该 在没有它的情况下匹配。

    您只需要使用两个属性为可搜索字段编制索引,一个带有同义词,另一个没有同义词。

    例子可以是

    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "text.withSynonyms": "I hope to play"
              }
            }
          ],
          "should": [
            {
              "match": {
                "text.withoutSynonyms": "I hope to play"
              }
            }
          ]
    
        }
      }
    }
    

    【讨论】:

    • 谢谢,是否可以在不重复字段数据的情况下定义两个具有两个索引的字段?
    • 另外,如何在查询中指定boost?
    • 你的意思是两个字段和两个不同的分析器吗?是的,您可以在这里看到:elastic.co/guide/en/elasticsearch/reference/current/… 但当然它会增加您的索引大小,但是相关性的成本=)并且为了提高一些匹配查询,您可以使用 { "match": { "text.withoutSynonyms": { " query": "我希望玩", "boost": 3 } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2020-10-29
    • 2018-07-07
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多