web-dev-qa-db-ja.com

大文字と小文字の区別が機能しない

検索で大文字と小文字が区別される理由がわかりません。私が読んだすべてのことは、ESはデフォルトで鈍感であると言っています。インデックス作成と検索用の標準アナライザーを指定するマッピングがありますが、大文字と小文字が区別されるものがあるようです。つまり、ワイルドカード:

"query": {
"bool": {
  "must": [
    {
      "wildcard": {
        "name": {
          "value": "Rae*"
        }
      }
    }
  ]
}

これは失敗しますが、「rae *」は希望どおりに機能します。 'starts-with'タイプの検索にはワイルドカードを使用する必要があります(私は推測します)。

.NetアプリからNESTを使用しており、インデックスを作成するときにアナライザーを指定しています。

  var settings = new IndexSettings();
  settings.NumberOfReplicas = _configuration.Replicas;
  settings.NumberOfShards = _configuration.Shards;
  settings.Add("index.refresh_interval", "10s");
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer()));
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer()));

この場合、単純なアナライザーを使用していますが、標準のアナライザーでも同じ結果が得られます。

マッピングは次のようになります。

name: {
    type: string
    analyzer: simple
    store: yes
}

誰かがここで何が悪いのか考えましたか?

ありがとう

16
Jonesie

ドキュメント から、

「[ワイルドカードクエリ]は、ワイルドカード式に一致するフィールドを持つドキュメントに一致します(分析されていません)」 。

検索語は分析されないため、検索クエリを生成する前に、基本的に自分で分析を実行する必要があります。この場合、これは検索語を小文字にする必要があることを意味します。または、 query_string

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "name:Rae*"
          }
        }
      ]
    }
  }
}
30
Matthew Boynes