elasticsearch 为 synonyms/stemming 自定义分数

elasticsearch customize score for synonyms/stemming

我正在使用 elasticsearch 1.1.2。

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

示例:

{ "multi_match":{ "query" : "this is a test", "fields" : [ "title^3", "description^2", "body" ] } }

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

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

假设我搜索 "injury",我想:

-如果找到完全匹配则给标题一个系数3:标题包含单词"injury".

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

-如果找到词干,则将标题的系数设为 1:标题包含单词 "injuries"。

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

谢谢!

您可以通过在 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"
      ]
    }
  }
}