Elasticsearch 部分产品类型名称

Elasticsearch partial producttype names

在笔记本电脑上通常有 "type name" 例如。 联想T430 联想T430P 联想 T430S

阿苏

用户希望在搜索 T430 时找到 T430 的所有变体

但是 elasticsearch 中的标准分析器在 space/non-alfanumeric 上标记化。

因此搜索 T430 只会 return T430 变体而不是其他变体。

解决这个问题的最佳方法是什么?我想过这些解决方案

elasticsearch 会分析default.So,你应该如下设置elasticsearch 的映射, "field":{ "index": "not_analyzed", "type": "string" }, 或者您可以在创建新索引之前设置模板。 希望对您有所帮助。

您可以使用 prefix query,它比通配符查询性能更好。 为此,您需要让您的字段不被分析如下

"type_name": {"type": "string", "index": "not_analyzed"}

另一种方法是使用 edge ngram tokenizer,这可能会增加您的索引大小,但会提供更好的性能。

您可以如下定义自定义分析器

{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "my_analyzer" : {
                    "tokenizer" : "customedgeNgram"
                }
            },
            "tokenizer" : {
                "customedgeNgram" : {
                    "type" : "edgeNGram",
                    "min_gram" : "3",
                    "max_gram" : "10"
                }
            }
        }
    }
}

您需要根据需要更改 min_grammax_gram 值。并在您的领域中用作

"type_name": {"type": "string", "analyzer": "my_analyzer"}

现在您可以在字段上使用简单的术语查询 type_name