検索で大文字と小文字が区別される理由がわかりません。私が読んだすべてのことは、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
}
誰かがここで何が悪いのか考えましたか?
ありがとう
ドキュメント から、
「[ワイルドカードクエリ]は、ワイルドカード式に一致するフィールドを持つドキュメントに一致します(分析されていません)」 。
検索語は分析されないため、検索クエリを生成する前に、基本的に自分で分析を実行する必要があります。この場合、これは検索語を小文字にする必要があることを意味します。または、 query_string
:
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "name:Rae*"
}
}
]
}
}
}