【问题标题】:Elasticsearch custom analyzer with two output tokens具有两个输出令牌的 Elasticsearch 自定义分析器
【发布时间】:2019-05-21 05:43:07
【问题描述】:

要求是创建一个自定义分析器,它可以生成两个令牌,如下所示。

例如

Input -> B.tech in
Output Tokens ->
- btechin
- b.tech in

我可以删除非字母数字字符,但如何在输出标记列表中保留原始字符。下面是我创建的自定义分析器。

       "alphanumericStringAnalyzer": {
            "filter": [
                "lowercase",
                "minLength_filter"],
            "char_filter": [
                "specialCharactersFilter"
            ],
            "type": "custom",
            "tokenizer": "keyword"
        }

      "char_filter": {
        "specialCharactersFilter": {
            "pattern": "[^A-Za-z0-9]",
            "type": "pattern_replace",
            "replacement": ""
        }
      },

此分析器正在为输入“B.tech in”生成单个标记“btechin”,但我也希望在标记列表“B.tech in”中也有原始标记

谢谢!

【问题讨论】:

  • 我认为不可能,您可以创建另一个字段并将该字段的值复制到其中并将其传递给关键字标记器?这也有助于您为什么需要此功能

标签: elasticsearch tokenize analyzer elasticsearch-6


【解决方案1】:

您可以使用 documentation 中描述的单词标记分隔符

这里是单词分隔符配置的示例:

POST _analyze
{
  "text": "B.tech in",
  "tokenizer": "keyword",
  "filter": [
    "lowercase",
    {
      "type": "word_delimiter",
      "catenate_all": true,
      "preserve_original": true,
      "generate_word_parts": false
    }
  ]
}

结果:

{
  "tokens": [
    {
      "token": "b.tech in",
      "start_offset": 0,
      "end_offset": 9,
      "type": "word",
      "position": 0
    },
    {
      "token": "btechin",
      "start_offset": 0,
      "end_offset": 9,
      "type": "word",
      "position": 0
    }
  ]
}

我希望它能满足您的要求!

【讨论】:

  • 太好了,我不知道我们可以保留原文,点赞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2014-08-08
  • 1970-01-01
  • 2016-01-12
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多