Elasticsearch部分产品类型名称

时间:2015-06-02 10:29:33

标签: search elasticsearch partial

在笔记本电脑上通常有一个“类型名称”,例如。 联想T430 联想T430P 联想T430S

阿苏

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

但是,弹性搜索中的标准分析器会对空间/非风险数据进行标记。

因此搜索T430只会返回T430变体,而不会返回其他变体。

解决此问题的最佳方法是什么?我考虑过这些解决方案

  • 检测用户是否搜索产品类型并将搜索转换为通配符搜索,例如。 T430 * - 这很难扩展

  • 使分析仪了解不同类型的产品类型,并可以从T430S构建T430令牌

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用性能优于通配符查询的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

上使用简单的字词查询