ngramフィルターを使用して単語またはフレーズを実行している場合、元の単語はインデックスに登録されないようです。代わりに、max_gram値までの単語のチャンクのみを取得します。元の単語にもインデックスが付けられると思います。Elasticsearch0.20.5を使用しています。次のようなngramのフィルターを使用してインデックスを設定した場合:
CURL -XPUT 'http://localhost:9200/test/' -d '{
"settings": {
"analysis": {
"filter": {
"my_ngram": {
"max_gram": 10,
"min_gram": 1,
"type": "nGram"
},
"my_stemmer": {
"type": "stemmer",
"name": "english"
}
},
"analyzer": {
"default_index": {
"filter": [
"standard",
"lowercase",
"asciifolding",
"my_ngram",
"my_stemmer"
],
"type": "custom",
"tokenizer": "standard"
},
"default_search": {
"filter": [
"standard",
"lowercase"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}'
それから私は長い言葉を文書に入れました:
CURL -XPUT 'http://localhost:9200/test/item/1' -d '{
"foo" : "REALLY_REALLY_LONG_WORD"
}'
そして、私はその長い単語を検索します:
CURL -XGET 'http://localhost:9200/test/item/_search' -d '{
"query":
{
"match" : {
"foo" : "REALLY_REALLY_LONG_WORD"
}
}
}'
結果は0です。その単語の10文字のチャンクをクエリすると、結果が得られます。これを実行すると:
curl -XGET 'localhost:9200/test/_analyze?text=REALLY_REALLY_LONG_WORD
私は何トンものグラムを取り戻しますが、元の言葉ではありません。これを希望どおりに機能させるための構成が不足していますか?