我正在使用elasticsearch 1.1.2。
我在可搜索字段上使用具有不同权重的多重匹配查询。
例:
{“ multi_match”:{“ query”:“这是一个测试”,“ fields”:[“ title ^ 3”,“ description ^ 2”,“ body”]}}
因此,在我的示例中,标题的重要性是正文的三倍。
我想根据找到的匹配项为每个字段自定义权重。
假设我搜索“伤害”,我想:
-如果找到完全匹配的标题,则使标题的系数为3:标题包含“伤害”一词。
-如果找到同义词,则为标题提供2的系数:标题包含单词“ bruise”。
-如果找到词干,则为标题赋予系数1:标题包含“伤害”一词。
有没有办法进行这种定制?
谢谢!
您可以通过在值上使用多字段映射来实现title。
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" ] } } }