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