【问题标题】:Merge token filter in Elasticsearch在 Elasticsearch 中合并令牌过滤器
【发布时间】:2015-09-22 03:19:01
【问题描述】:

我正在尝试在对一些标签进行词干提取并应用其他过滤器之后对其进行索引。这些标签可以由多个单词组成。

我没能做的事情是应用最终的令牌过滤器,它从令牌流中输出单个令牌。

因此,我希望将由多个单词组成的标签进行词干提取,删除停用词,然后在保存到索引中之前再次以相同的标记加入(关键字标记器的作用,但作为过滤器)。

我发现在 Elasticsearch 中应用令牌过滤器的方式无法做到这一点:如果我对空格进行令牌化,然后是词干,所有后续的令牌过滤器都会接收这些词干化的单个令牌,而不是整个令牌流,对吧?

例如我想要标签

狐狸跳过栅栏

将整个token保存在索引中

狐狸跳过栅栏

而不是

狐狸,跳,越过,栅栏

有没有什么方法可以做到这一点,而无需在我的应用程序中预处理字符串,然后将其索引为 not_analyzed 字段?

【问题讨论】:

    标签: elasticsearch merge concatenation tokenize


    【解决方案1】:

    经过一番研究,我发现了这个帖子:

    http://elasticsearch-users.115913.n3.nabble.com/Is-there-a-concatenation-filter-td3711094.html

    它有我正在寻找的确切解决方案。

    我创建了一个简单的 Elasticsearch 插件,它只提供 Concatenate Token Filter,您可以在以下位置找到它:

    https://github.com/francesconero/elasticsearch-concatenate-token-filter

    【讨论】:

      【解决方案2】:

      提供最新答案,以防有人遇到此问题寻找解决方案。如果您的用例正在聚合,OP 建议他们需要做什么:

      有没有什么方法可以做到这一点,而无需在我的应用程序中预处理字符串,然后将其索引为 not_analyzed 字段?

      实际上是解决此问题的最佳方法,因为 Elasticsearch 使用 keywordtext 类型进行映射,而不仅仅是 string 类型,并建议使用多个字段(一个 keyword 和一个 @987654327 @) 用于需要进行全文搜索的聚合用例 (https://www.elastic.co/guide/en/elasticsearch/reference/7.12/text.html#fielddata-mapping-param)。

      在现代版本的 Elasticsearch 中,它甚至会拒绝对 text 字段执行聚合,除非在映射中将 fielddata 明确设置为 true,警告您即将遇到的性能问题如果您不使用多字段,则会遇到。

      现代版本的 Elasticsearch 还提供了将数据预处理到集群内的多个字段的工具,如果在索引之前执行此操作很麻烦 (https://www.elastic.co/guide/en/elasticsearch/reference/7.12/ingest.html)。

      【讨论】:

        猜你喜欢
        • 2012-09-19
        • 2022-01-17
        • 1970-01-01
        • 2013-05-31
        • 2020-01-31
        • 2016-10-30
        • 2015-09-17
        • 2014-02-02
        • 1970-01-01
        相关资源
        最近更新 更多