2012-05-30 20 views
5

मुझे एक ऐसी परियोजना विरासत में मिली है जिसमें टायर के माध्यम से कुछ लोचदार खोज है।लोचदार खोज और टायर का उपयोग करके उच्चारणों को अनदेखा करें

खोज काम कर रही है, लेकिन इसके माध्यम से उच्चारण करता है। उदाहरण के लिए "इस" को "थिस" और "थिस" वापस करने की आवश्यकता है।

मैं इस टायर प्रलेखन पढ़ा है: http://karmi.github.com/tire/

साथ ही: http://railscasts.com/episodes/306-elasticsearch-part-1?view=asciicast

कौन सा कहा गया है कि लोचदार खोज के विकल्पों में से सबसे टायर में उपलब्ध हैं।

सर्च कर रहे हैं अनदेखी लहजे के बारे में, asciifolding आ रहा रखा, लेकिन लोचदार खोज सिर्फ इस इस बारे में कहना है:

http://www.elasticsearch.org/guide/reference/index-modules/analysis/asciifolding-tokenfilter.html

इसके अतिरिक्त मैं के बारे में फिल्टर/लहजे/आदि जैसे कि ये कुछ चीजें मिल गया:

https://github.com/elasticsearch/elasticsearch/issues/890
https://gist.github.com/2142635

लेकिन वे सभी नंगे लोचदार खोज विकल्पों का उपयोग कर रहे हैं।

जब मैं अपने रूबी कोड में एसिसीफोल्डिंग फ़िल्टर का उपयोग करने का प्रयास करता हूं, तो मुझे "asciifolding" के लिए परिभाषित फ़िल्टर के बारे में कोई त्रुटि नहीं मिलती है।

यहां मेरे कोड में किए जा रहे खोज की हिम्मत है - मैं इसे एक उच्चारण-प्रेरक खोज करने के लिए कैसे संशोधित कर सकता हूं। क्या यह असभ्य है, और यदि हां, तो मैं इसे यहां कैसे घोषित करूं?

result = tire.search(:load => true,page: params[:page], per_page: params[:per_page]) do 
    query { string "#{params[:term]}", :default_operator => 'and' } if params[:term].present? 
    filter :missing, :field => 'original_media_id' #see above 
    #asciifolding? 
    sort { by :updated_at, :desc } if params[:term].present? 
    facet 'files' do 
    terms 'indexed_files.file.id' 
    end 
end 

संपादित करें: या शायद यह मानचित्रण/अनुक्रमण में किया जाना चाहिए? और उसके बाद सूचकांक फिर से शुरू करें। यहाँ मानचित्रण है, मैं डाल की कोशिश की है: फिल्टर => "asciifolding" अनुक्रमणिका में से कुछ के लिए, लेकिन यह है कि काम करने के लिए नहीं मालूम था (और न ही उत्पन्न किसी भी त्रुटि उत्पादन):

tire.mapping do 
    indexes :id, :index => :not_analyzed 
    indexes :name, :filter => "asciifolding" 
    indexes :description, :filter => "asciifolding" 
    indexes :created_at, :type => 'date' 
    indexes :updated_at, :type => 'date' 
    indexes :file_type 
    indexes :indexed_files, :type => 'object' do 
     indexes :file, :type => 'object', 
      :properties => { 
      :title => { 
      :type => "multi_field", 
       :fields => { 
       :raw => { :type => 'string', :index => 'not_analyzed'}, 
       :title => { :type => 'string', :filter => "asciifolding" } 
       } 
      }, 
      :description => { :type => "string", :filter => "asciifolding" } 
      } 
    end 
end 

उत्तर

3

एक बहुत अच्छा उदाहरण नहीं है इस लेख में "asciifolding" (टेक्स्ट अनुक्रमण करते समय टोकन से उच्चारण को हटाकर): Autocomplete with Tire

संबंधित मुद्दे