我正在使用ngram分析器进行索引,使用标准分析器进行查询。
目前我已将多部电话和iphone编入索引。
当我搜索iphone时,得分和因特网的相关性高于iphone。
如何构建查询以获得更高的iPhone分数?
我执行的查询是
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "iphone",
"fields": [
"englishName",
"aliasName"
]
}
},
我需要的是iphone得分高于多部电话。
性能怎么样?答案 0 :(得分:0)
我已回答类似问题here
基本上,您需要将字段的原始版本添加到映射中。您可以将keyword analzyer与lowercase filter一起使用,也可以将其设为"index" : "not_analyzed"
,甚至可以使用默认的标准分析器。
然后你进行bool
查询并为exact match
添加一个条款,它会得分更高。
编辑:示例
您可以将您的englishName字段映射为
englishName: {
type: 'string',
index_analyzer: 'ngram_analyzer',
search_analyzer: 'standard',
"fields": {
"raw": {
"type": "string",
"index" : "not_analyzed" <--- here
}
}
}
您可以使用aliasName执行相同操作 然后你的查询看起来像这样
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "iphone",
"fields": [
"englishName",
"aliasName"
]
}
},
{
"multi_match": {
"query": "iphone",
"fields": [
"englishName.raw",
"aliasName.raw"
],
"boost": 5
}
}
]
}
}
}
使用此查询iphone 将获得更高分数
希望这会有所帮助。