我使用的是elasticsearch版本1.2.1。 我有一个用例,我想在其中创建一个自定义标记生成器,它会将标记的长度分解为一定的最小长度。例如,假设最小长度为4,则令牌“abcdefghij”将拆分为: “abcd efgh ij”。
我想知道我是否可以在不需要编写自定义Lucene Tokenizer类的情况下实现此逻辑?
提前致谢。
答案 0 :(得分:3)
根据您的要求,如果您无法使用pattern tokenizer执行此操作,那么您需要自己编写自定义Lucene Tokenizer类。您可以为它创建自定义Elasticsearch插件。您可以参考this获取有关如何为自定义分析器创建Elasticsearch插件的示例。
答案 1 :(得分:2)
Pattern Tokenizer支持参数"group"
它的默认值为“-1”,这意味着使用模式进行拆分,这就是你所看到的。
但是,通过在模式中定义组> = 0并设置group-parameter,可以完成此操作!例如。以下标记生成器会将输入拆分为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
}
]
}