【问题标题】:elasticsearch customize score for synonyms/stemmingelasticsearch为同义词/词干定制分数
【发布时间】:2015-02-04 16:52:59
【问题描述】:

我正在使用弹性搜索 1.1.2。

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

例子:

{ “多匹配”:{ "query" : "这是一个测试", “字段”:[“标题^3”,“描述^2”,“正文”] } }

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

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

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

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

-如果找到同义词,则给标题一个系数 2:标题包含单词“bruise”。

-如果找到词干,则给标题一个系数 1:标题包含单词“injuries”。

有没有办法进行这种自定义?

谢谢!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以通过在您的 title 值上使用 multi-fields 映射来实现。

    它允许您将多个类型映射到相同的输入值,从而使用不同的分析器。

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

    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"
          ]
        }
      }
    }
    

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2019-02-13
    • 2015-11-20
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多