elasticsearch为同义词/词干定制分数

发布于 2021-02-01 11:52:54

我正在使用elasticsearch 1.1.2。

我在可搜索字段上使用具有不同权重的多重匹配查询。

例:

{“ multi_match”:{“ query”:“这是一个测试”,“ fields”:[“ title ^ 3”,“ description ^
2”,“ body”]}}

因此,在我的示例中,标题的重要性是正文的三倍。

我想根据找到的匹配项为每个字段自定义权重。

假设我搜索“伤害”,我想:

-如果找到完全匹配的标题,则使标题的系数为3:标题包含“伤害”一词。

-如果找到同义词,则为标题提供2的系数:标题包含单词“ bruise”。

-如果找到词干,则为标题赋予系数1:标题包含“伤害”一词。

有没有办法进行这种定制?

谢谢!

关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    您可以通过在值上使用多字段映射来实现title

    它允许您将几种类型映射到相同的输入值,以便使用不同的分析器。

    假设您已为同义词和词干定义了自定义分析器,请尝试更新映射:

    PUT /<index_name>/<type_name>/_mapping
    {
      "<type>": {
        "properties": {
          "title": {
            "type": "string",
            "fields": {
              "exact": {
                "type": "string",
                "index": "not_analyzed"
              },          
              "synonym": {
                "type": "string",
                "index": "analyzed",
                "analyzer": "synonym_analyzer"
              },
              "stemmed": {
                "type": "string",
                "index": "analyzed",
                "analyzer": "stemming_analyzer"
              }
            }
          }
        }
      }
    }
    

    并且以下查询应符合您的期望:

    POST /<index_name>/<type_name>/_search
    {
      "query": {
        "multi_match": {
          "query": "injury",
          "fields": [
            "title.exact^3",
            "title.synonym^2",
            "title.stemmed"
          ]
        }
      }
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看