我有pattern_replace令牌过滤器(es docs)
'addressPattern' => array(
'type' => 'pattern_replace',
'pattern' => '(str\.|street|and many more like this)',
'replacement' => '',
),
如何使匹配不区分大小写?
答案 0 :(得分:5)
很抱歉,这个答案不及时,但我正在寻找在Elasticsearch中执行不区分大小写的模式匹配的问题。一种方法是使用嵌入式标志:
'pattern' => '(?i)(str\.|street|and many more like this)',
嵌入式标志使用(?xyz)语法,其中xyz是标志。其他标志是'u'用于unicode情况,'m'用于多行,'s'用于dotall,以及更多。通常我和s是最有用的标志,如果使用非英语单词,你也可以使用它。请注意,嵌入式标志是上下文的 - 如果您将其放在组的开头,它仅适用于该组。
Lucene使用Java的标准库正则表达式,因此有关更多详细信息,请参阅java docs for util.regex.Pattern或tutorial on java regex patterns。
答案 1 :(得分:1)
您可以在lowercase filter
中加入analyzer
。例如:
settings: {
analysis: {
tokenizer: {pattern_tokenizer: {... define your tokenizer here }}
analyzer: {
tokenizer: 'pattern_tokenizer',
filter: ['lowercase'],
....other details...
}
}
}
重点是在分析仪中定义lowercase
过滤器。
如果您使用term
查询来匹配搜索,则需要将搜索字词转换为小写,然后应用查询。