6

我有 pattern_replace 令牌过滤器(es docs

'addressPattern' => array(
                'type' => 'pattern_replace',
                'pattern' => '(str\.|street|and many more like this)',
                'replacement' => '',
            ),

如何使匹配不区分大小写?

4

2 回答 2

5

抱歉,这个答案不及时,但我正在寻找在 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 教程

于 2015-05-15T10:28:12.467 回答
1

您可以包含lowercase filteranalyzer. 例如:

settings: {
  analysis: {
    tokenizer: {pattern_tokenizer: {... define your tokenizer here }}
    analyzer: {
      tokenizer: 'pattern_tokenizer',
      filter: ['lowercase'], 
      ....other details...

    }
  }
}

关键是在分析器中定义lowercase过滤器。

如果您使用term查询来匹配您的搜索,那么您需要将搜索词转换为小写,然后应用查询。

于 2013-11-14T13:18:12.717 回答