Elasticsearch去除特殊字符(来自非ASCII语言)

3

For english, I could use something like

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

去除非文本字符。

然而,对于亚洲等非 ASCII 语言,上述过滤器会移除所有有效的非特殊字符。

如何从亚洲语言中移除特殊字符?


如果在此处使用Java正则表达式引擎,则可以使用"pattern": "[^\\p{L}\\p{Nd}]" - Wiktor Stribiżew
我不知道你所说的Java正则表达式引擎是什么,但它似乎可以工作。(我猜是因为Elasticsearch是基于Java的,我猜你指的就是这个。) - eugene
1
Elasticsearch使用不同的正则表达式引擎,有时是Lucene,有时是java.util.regex - Wiktor Stribiżew
发布问题后花了一些时间(7分钟)才选出答案。 - eugene
1个回答

4

pattern_replace过滤器中使用的正则表达式类型似乎是java.util.regex

要删除除任何Unicode字母和十进制数字之外的所有字符,可以使用:

 "specialCharactersFilter": {
     "pattern": "[^\\p{L}\\p{Nd}]",
     "type": "pattern_replace",
     "replacement": ""
   }

为了仅保留 ASCII 数字并移除所有印度、泰米尔等数字,可以使用以下变体:
"pattern": "[^\\p{L}0-9]"

请参见正则表达式演示

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接