【问题标题】:Elasticsearch partial producttype namesElasticsearch 部分产品类型名称
【发布时间】:2015-06-02 10:29:33
【问题描述】:

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

阿苏

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

但 elasticsearch 中的标准分析器在空间/非字母数字 aso 上进行标记。

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

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

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

  • 制作一个能够理解不同类型产品类型并可以从 T430S 构造 T430 令牌的分析器

【问题讨论】:

    标签: search elasticsearch partial


    【解决方案1】:

    elasticsearch 将分析默认值。因此,您应该将 elasticsearch 的映射设置如下, “场地”: { “索引”:“未分析”, “类型”:“字符串” }, 或者您可以在创建新索引之前设置模板。 希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您可以使用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 上使用简单的术语查询

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2015-10-07
        • 2014-06-29
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多