【发布时间】:2021-06-16 21:57:19
【问题描述】:
我正在为我们的一个用例尝试 Elasticsearch 的 pattern char filter。它使用 java 正则表达式。
我想用空格替换任何大小写更改或任何特殊字符。文档中有一些很好的例子。但是,我正在寻找一种可以完成替换工作的字符过滤器。
我一直在不同的博客中打破我的头,但没有运气:) 非常感谢这方面的任何帮助。
用空格替换任何大小写更改或任何特殊字符
例子:
Input: StackOverFlowIsAwesome
Output: Stack Over Flow Is Awesome
Input: stack_over_flow_is_awesome
Output: stack over flow is awesome
Input: stack-over-flow-is-awesome
Output: stack over flow is awesome
Input: stack#over#flow#is#awesome
Output: stack over flow is awesome
..... any special char based inputs
**this one is good, if it is possible**
Input: STACKOverFlowIsAwesome
Output: STACK Over Flow Is Awesome
我正在使用以下 2 个字符的过滤器:
"char_filter": {
"case_char_filter": {
"type": "pattern_replace",
"pattern": "(?<=\\p{Lower})(?=\\p{Upper})",
"replacement": " "
},
"special_char_filter": {
"type": "pattern_replace",
"pattern": "[^a-zA-Z0-9]",
"replacement": " "
}
【问题讨论】:
-
不清楚您的问题是什么-您是否要替换elasticsearch?或者替换它的算法或者只是写一个java正则表达式?或者您是否正在为编写什么正则表达式来匹配特定情况而苦苦挣扎?也许也发布您期望的输入和输出。
-
@MrR 感谢您指出这一点。我已经添加了示例。
-
其中一些是相当直接和通用的......即用空格
String.replaceAll("-", " ");替换-。第一个是什么意思 - 在骆驼案例词上分开?最后一个不只是拆分,您希望它也使所有内容都小写吗? -
更正了最后一个。不寻找 java 函数 :) 需要正则表达式来解决这些问题。因为 ES 在它的过滤器中需要正则表达式。
-
啊,我知道您想要 ES 配置来执行这些示例之一(或所有这些示例)?
标签: java regex elasticsearch regexp-replace