儘管我已經看到很多帳戶提到這是相對直接的,但我還沒有設法看到它正常工作。假設我有這個:ElasticSearch/Tire:如何正確設置部分單詞搜索
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
假設我有一輛名爲「Ford」的汽車,我更新了我的索引。現在,如果我搜索「福特」:
Car.tire.search { query { string "Ford" } }
我的車在我的結果中。現在,如果我查找「For」:
Car.tire.search { query { string "For" } }
我的車已找不到了。我認爲nGram過濾器會自動爲我處理,但顯然不是。作爲臨時解決方案,我使用通配符(*)進行此類搜索,但這絕對不是最好的方法,因爲我的搜索中是min_gram和max_gram定義的關鍵元素。誰能告訴我他們是如何解決這個問題的?
我使用Rails 3.2.12與紅寶石1.9.3。 ElasticSearch版本爲0.20.5。
我用你的定義(自定義分析,邊緣正克過濾器),併產生相同的結果:「對於」什麼回報,「福特」返回的一切。根據文件,它應該像你說的那樣工作,我只是不明白爲什麼它不是。你在使用Ruby/Tire嗎? – ChuckE 2013-03-12 16:55:04
是的,我正在使用輪胎和紅寶石。你是否用耙輪重新索引你的數據:import CLASS ='Car'FORCE = true? – 2013-03-13 09:23:24
我做到了。都使用rake任務並直接在控制檯中刪除/創建/導入。 – ChuckE 2013-03-13 14:55:00