[英]custom analyzer which breaks the tokens on special characters and lowercase/uppercase
[英]ElasticSearch custom analyzer breaks words containing special characters
如果用户搜索foo(bar)
, elasticsearch 将其分为foo
和bar
。
我想要实现的是,当用户输入说, i want a foo(bar)
时,我完全匹配一个名为foo(bar)
的项目,名称是固定的,它将被过滤器使用,所以它设置为关键字类型。
我做的大概步骤,
foo(bar)
的字典abc => foo(bar)
的同义词映射现在,当我搜索abc
时, elasticsearch 将其转换为foo(bar)
,但随后将其分解为foo
和bar
。
问题是,您可能已经知道, how to preserve special characters in elasticsearch analyzer?
我尝试在字典文件中使用引号(“),例如"foo(bar)"
,但它不起作用。或者可能有其他方法可以解决这个问题?
顺便说一句,我在这里使用foo(bar)
只是为了简单,实际情况要复杂得多。
提前致谢。
例如, standard
标记器(通过分析器简称使用)由所有非单词字符( \W+
)分割:
POST _analyze
{
"analyzer": "standard",
"text": "foo(bar)"
}
==>
{
"tokens" : [
{
"token" : "foo",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "bar",
"start_offset" : 4,
"end_offset" : 7,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
与自定义标记器相比,它由除(
和)
(即[^\w\(\)]+
)之外的所有非单词字符分割:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": "[^\\w\\(\\)]+"
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "foo(bar)"
}
===>
{
"tokens" : [
{
"token" : "foo(bar)",
"start_offset" : 0,
"end_offset" : 8,
"type" : "word",
"position" : 0
}
]
}
我以Pattern Tokenier为例,将某些符号(在您的情况下为(
和)
排除在标记化中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.