我正在使用elasticsearch 1.1.2.
我在可搜索字段上使用具有不同权重的多匹配查询.
例:
{"multi_match":{"query":"this is a test","fields":["title ^ 3","description ^ 2","body"]}}
所以在我的示例标题中,身体的重量是身体的三倍.
我想根据找到的匹配自定义每个字段的重量.
假设我搜索"伤害",我想:
- 如果找到完全匹配,则给标题系数3:标题包含单词"伤害".
- 如果找到同义词,则给标题系数2:标题包含单词"bruise".
- 如果找到词干,则给标题系数1:标题包含"伤害"一词.
有没有办法做这种定制?
谢谢!
您可以通过对值使用多字段映射来实现此目的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"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且以下查询应该如您所愿匹配:
POST /<index_name>/<type_name>/_search
{
"query": {
"multi_match": {
"query": "injury",
"fields": [
"title.exact^3",
"title.synonym^2",
"title.stemmed"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |