【问题标题】:Create and merge indexes using multiple analyzers in Elasticsearch在 Elasticsearch 中使用多个分析器创建和合并索引
【发布时间】:2021-12-05 16:37:57
【问题描述】:

所以,我在配置 JSON 文件中定义了两个过滤器。现在,我想一次应用这些过滤器,然后组合结果。

"filter": {
      "autocomplete_filter": {
        "type": "edge_ngram",
        "min_gram": 3,
        "max_gram": 20
      },
      "shingle_filter": {
          "type": "shingle",
          "min_shingle_size": 1,
          "max_shingle_size": 2
      }
    },

例子:

"best mac laptop" -> "best", "mac", "laptop", "best mac", "mac laptop", "bes", "best", "best ", "best m", "best ma", "best mac", ...

像上面一样,我想使用 Shingle 过滤器创建索引,然后我想在原始数据上创建索引自动完成过滤器,然后在单个文档中组合并创建索引。可能吗?到底有没有?

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    因此,在仔细研究了 Spring 数据 Elasticsearch 文档后,我能够使用两个不同的分析器为同一字段编制索引。

    @Document(indexName = "course-doc")
    @Setting(settingPath = "es-config/autocomplete.json")
    @Getter
    @Setter
    public class Course {
      @Id
      long id;
    
      @MultiField(
          mainField = @Field(type = FieldType.Text, analyzer = "autocomplete_index", searchAnalyzer = "autocomplete_search"),
          otherFields = {@InnerField(suffix = "search", type = FieldType.Text, analyzer = "search_index", searchAnalyzer = "autocomplete_search")})
      String name;
    }
    

    自动完成.json

    {
      "analysis": {
        "filter": {
          "autocomplete_filter": {
            "type": "edge_ngram",
            "min_gram": 2,
            "max_gram": 20
          },
          "shingle_filter": {
              "type": "shingle",
              "min_shingle_size": 1,
              "max_shingle_size": 10
          }
        },
        "analyzer": {
          "autocomplete_search": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [ "lowercase" ]
          },
          "autocomplete_index": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [ "lowercase", "stop" , "autocomplete_filter" ]
          },
          "search_index": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [ "lowercase" , "shingle_filter" ]
          },
          "standard-analyzer": {
            "type": "custom",
            "tokenizer": "standard",
            "filter": [ "lowercase", "stop" ]
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2015-08-18
      • 1970-01-01
      相关资源
      最近更新 更多