【发布时间】:2017-08-16 02:49:18
【问题描述】:
我有以下(简化的)数据
[
{ 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”比“0854”更适合查询“8”。但是当他们搜索“8”时,他们会得到大量的结果,例如“08**”的排名高于“0008”。
如何让“0008”在搜索“8”时排名高于“0854”?
- 有时用户会在他们的查询中包含前导零。
- 我认为问题在于 id 1 和 2 都标记为单个“8”,因此从那里开始它们是相等的。我只是不知道如何解决这个问题。
查询:
POST _search
{
"size": 24,
"from": 0,
"query": {
"multi_match": {
"query": "8",
"fields": [
"customerNumber",
"name"
],
"type": "best_fields"
}
}
}
【问题讨论】:
标签: elasticsearch