使用自定义 Elasticsearch pipelineAnalyzer 意外删除了令牌中的句点 (.)

问题描述 投票:0回答:1

我在 Elasticsearch 中配置了一个名为 pipelineAnalyzer 的自定义分析器,该分析器旨在使用管道 (|) 字符作为分隔符来标记字符串,同时还应用小写转换、ASCII 折叠以及修剪标记开头和结尾的空格。但是,我遇到了意外的行为,分析器似乎还从标记中删除了句点 (.),这不是有意的。

这是我的管道分析器的配置:

{
  "pipeAnalyzer": {
    "type": "custom",
    "tokenizer": "pattern",
    "pattern": "\\|",
    "filter": ["trim", "lowercase", "asciifolding"]
  }
}

例如,在分析字符串

75207149.0.1_sb.research.com
时,我希望输出保留句点作为标记的一部分。相反,分析器以删除句点的方式分割字符串,生成诸如
75207149
0
1_sb
research
com
等标记,而不是将整个字符串视为单个标记或者至少保留标记内的句点。

此行为令人费解,因为配置的模式标记生成器使用竖线 (|) 作为分隔符,并且没有任何迹象表明应删除句点或将其视为分隔符。

问题:

为什么我的 PipeAnalyzer 会从标记中删除句点,尽管标记生成器被配置为使用管道字符作为分隔符? 如何调整我的 pipelineAnalyzer 配置以确保在分析过程中不会从令牌中删除句点?

任何有关如何解决此问题的见解或建议将不胜感激。我使用的是 Elasticsearch 版本 7.17。

elasticsearch tokenize elasticsearch-analyzers
1个回答
0
投票

解决方案

当我测试了您的分析器设置时,我注意到正如您所说,它将删除

dots
。这实际上有点奇怪!在另一个测试中,我首先从分析器主体中提取了分词器定义部分,以便它正常工作!

只需测试以下设置:

{
    "settings": {
      "analysis": {
        "analyzer": {
          "pipeAnalyzer": {
            "tokenizer": "my_tokenizer",
            "filter": ["trim", "lowercase", "asciifolding"]
          }
        },
        "tokenizer": {
          "my_tokenizer": {
            "type": "pattern",
            "pattern": "\\|"
          }
        }
      }
  }
}

我想知道为什么会发生这样的事情,尽管根据Elasticsearch的官方文档创建自定义分析器

tokenizer
应该单独定义,并且只有你应该在那里使用它的最终名称。

© www.soinside.com 2019 - 2024. All rights reserved.