Elastic Search 字符组中包含哪些字符(空格、字母、数字、标点符号、符号)?

tot*_*ico 7 elasticsearch

我正在尝试使用 chargroup 分词器构建基于空格和标点符号的分词器。我发现至少有5 个预定义字符组whitespace, letter, digit, punctuation, symbol

\n\n

所以,我尝试了以下标记器:

\n\n
tokenizer": {\n    "my_tokenizer": { \n       "type": "char_group", \n       "tokenize_on_chars":["whitespace", "punctuation"]\n     }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,我意识到该@符号包含在punctuation我需要作为文本一部分的字符组中(例如捕获 Twitter 屏幕名称)。我不确定为什么@被认为是标点符号,但我的猜测是它可以在电子邮件地址中被视为标点符号?例如email@example.com

\n\n

无论如何,我自己添加了它们:

\n\n
tokenizer": {\n    "my_tokenizer": { \n       "type": "char_group", \n       "tokenize_on_chars":["whitespace", "\\n", ".", ",", ";", ":", "\\"", "`", "]", "[", ")", "(", "!", "?", "/", "\\\\", "\xe2\x80\x93"]\n     }\n},\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这个列表看起来相当随意,而且不太优雅。在哪里可以找到elasticsearch中不同字符组的定义?(或者,是否有一种更优雅的方法来根据standard英语和德语的标点符号列表来分隔标记?)。

\n

bai*_*rek 4

你可以看一下这个的源代码:

https://github.com/elastic/elasticsearch/blob/237650e9c054149fd08213b38a81a3666c1868e5/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CharMatcher.java

该类java.lang.Character负责定义常量,例如:

Character.MODIFIER_SYMBOL : ` ^
Character.DASH_PUNCTUATION : -
Character.MATH_SYMBOL : = ~ + | < >
Character.OTHER_PUNCTUATION : !@#%&*;':",./?
Character.START_PUNCTUATION : ( [ {
Character.END_PUNCTUATION : ) ] } 
Run Code Online (Sandbox Code Playgroud)