6

pattern_replace トークン フィルター ( es docs )があります。

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

大文字と小文字を区別しないで一致させるには?

4

2 に答える 2

5

この回答がタイムリーでなく申し訳ありませんが、Elasticsearch で大文字と小文字を区別しないパターン マッチングを実行する際の問題を探していました。1 つの方法は、埋め込みフラグを使用することです。

'pattern' => '(?i)(str\.|street|and many more like this)',

埋め込みフラグは (?xyz) 構文を使用します。xyz はフラグです。その他のフラグには、Unicode ケースの「u」、複数行の「m」、dotall の「s」などがあります。通常、i と s が最も便利なフラグです。英語以外の単語を扱う場合は、u も便利です。埋め込みフラグは文脈依存であることに注意してください。グループの先頭に置くと、そのグループ内でのみ適用されます。

Lucene は Java の標準ライブラリの正規表現を使用するため、詳細については、util.regex.Pattern の Java ドキュメントまたはJava 正規表現パターンのチュートリアルを参照してください。

于 2015-05-15T10:28:12.467 に答える
1

lowercase filterに含めることができますanalyzer。例えば:

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 に答える