我正在使用elasticsearch 1.1.2。
我在可搜索字段上使用具有不同权重的多重匹配查询。
例子:
{
“multi_match”:{
“query”:“这是一个测试”,
“fields”:[“title ^ 3”,“description ^ 2”,“body”]
}
}
因此,在我的示例中,标题的重要性是正文的三倍。
我想根据找到的匹配项为每个字段自定义权重。
假设我搜索“伤害”,我想:
-如果找到完全匹配的标题,则使标题的系数为3:标题包含“伤害”一词。
-如果找到同义词,则为标题提供2的系数:标题包含单词“bruise”。
-如果找到词干,则为标题赋予系数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"
]
}
}
}
关于elasticsearch为同义词/词干自定义分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28305250/