【问题标题】:How to give tokens from certain tokenizers more weight?如何赋予来自某些标记器的标记更多的权重?
【发布时间】: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


    【解决方案1】:

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

    我还将我之前使用的“Edge N Gram Token Filter”改为“Edge N Gram Tokenizer”。

    这两个变化共同产生了我想要的结果。

    【讨论】:

    • 可以在这里查询吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2017-04-20
    相关资源
    最近更新 更多