我有以下(简化)数据
[
{ id: 1, customerNumber: "0008", name: "Bob" },
{ id: 2, customerNumber: "0854", name: "Sue" },
{ id: 3, customerNumber: "0041", name: "Larry" }
]
上下文是应用程序顶部的自动完成搜索栏。
我正在使用自定义正则表达式标记生成器修剪前导零,以便用户无需输入它们。所以这让我得到了令牌
ID 1 => "8"
ID 2 => "854"
ID 3 => "41"
我还应用了一个edge-n-gram标记器,它为我提供了标记
ID 1 => "8"
ID 2 => "854", "85", "8"
ID 3 => "41", "4"
我们的用户认为“0008”更适合查询“8”而不是“0854”。但是当他们搜索“8”时,他们会得到大量的结果,比如“08 **”排名高于“0008”。
搜索“8”时如何使“0008”排名高于“0854”?
查询:
POST _search
{
"size": 24,
"from": 0,
"query": {
"multi_match": {
"query": "8",
"fields": [
"customerNumber",
"name"
],
"type": "best_fields"
}
}
}
答案 0 :(得分:0)
我最终通过将“前导零过滤器”从“令牌过滤器”更改为“字符过滤器”来实现我想要的结果。
我还更改了“Edge N Gram 令牌过滤器”,而我用来成为“Edge N Gram Tokenizer ”。
这两个变化一起给了我理想的结果。