elasticsearch自定义令牌化器-按长度拆分令牌



我使用的是弹性搜索1.2.1版本。我有一个用例,在这个用例中,我想创建一个自定义的令牌化器,它将按令牌的长度将令牌分解到某个最小长度。例如,假设最小长度为4,则令牌"abcdefghij"将被拆分为:"abcd efgh ij"。

我想知道我是否可以在不需要编码自定义Lucene Tokenizer类的情况下实现这个逻辑?

提前谢谢。

Pattern Tokenizer支持参数"group"

它的默认值是"-1",这意味着使用模式进行拆分,这就是您所看到的。

但是,通过在模式中定义一个>=0的组并设置组参数,就可以做到这一点!例如,以下令牌化器将输入拆分为4个字符的令牌:

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": "(.{4})",
          "group": "1"
        }
      }
    }
  }
}

通过以下方式分析文档:

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "comma,separated,values"
}

产生以下令牌:

{
  "tokens": [
    {
      "token": "comm",
      "start_offset": 0,
      "end_offset": 4,
      "type": "word",
      "position": 0
    },
    {
      "token": "a,se",
      "start_offset": 4,
      "end_offset": 8,
      "type": "word",
      "position": 1
    },
    {
      "token": "para",
      "start_offset": 8,
      "end_offset": 12,
      "type": "word",
      "position": 2
    },
    {
      "token": "ted,",
      "start_offset": 12,
      "end_offset": 16,
      "type": "word",
      "position": 3
    },
    {
      "token": "valu",
      "start_offset": 16,
      "end_offset": 20,
      "type": "word",
      "position": 4
    }
  ]
}

对于您的需求,如果您不能使用模式标记器来完成,那么您需要自己编写一个自定义的Lucene标记器类。你可以为它创建一个自定义的Elasticsearch插件。你可以参考这个例子来了解如何为自定义分析器创建Elasticsearch插件。

相关内容

  • 没有找到相关文章

最新更新