如何从某些分词器中给予令牌更多的权重?

时间:2017-08-14 18:33:48

标签: elasticsearch

我有以下(简化)数据

[
  { 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”?

  • 有时,用户会在查询中包含前导零。
  • 我认为问题是id 1和2都标记为单个“8”,所以从那里它们是相等的。我只是不知道如何解决这个问题。

查询:

POST _search
{
    "size": 24,
    "from": 0,
    "query": { 
        "multi_match": {
            "query": "8",
            "fields": [
                "customerNumber",
                "name"
            ],
            "type": "best_fields"
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

我最终通过将“前导零过滤器”从“令牌过滤器”更改为“字符过滤器”来实现我想要的结果。

我还更改了“Edge N Gram 令牌过滤器”,而我用来成为“Edge N Gram Tokenizer ”。

这两个变化一起给了我理想的结果。