これが比較的簡単であると言及している多くのアカウントを見てきましたが、私はそれが適切に機能していることを確認できませんでした. 私がこれを持っているとしましょう:
class Car < ActiveRecord::Base
settings analysis: {
filter: {
ngram_filter: { type: "nGram", min_gram: 3, max_gram: 12 }
},
analyzer: {
partial_analyzer: {
type: "snowball",
tokenizer: "standard",
filter: ["standard", "lowercase", "ngram_filter"]
}
}
} do
mapping do
indexes :name, index_analyzer: "partial_analyzer"
end
end
end
「フォード」という名前の車があり、インデックスを更新するとします。ここで、「フォード」を検索すると、次のようになります。
Car.tire.search { query { string "Ford" } }
私の車は私の結果です。さて、「For」を探すと:
Car.tire.search { query { string "For" } }
私の車はもう見つかりません。nGram フィルターが自動的に処理してくれると思っていましたが、どうやらそうではないようです。一時的な解決策として、このような検索にワイルドカード (*) を使用していますが、検索の min_gram および max_gram 定義の重要な要素であるため、これは間違いなく最善の方法ではありません。彼らがこれをどのように解決したか誰か教えてもらえますか?
Ruby 1.9.3 で Rails 3.2.12 を使用しています。エラスティックサーチのバージョンは 0.20.5 です。