2012-05-30 37 views
5

Tôi đang kế thừa một dự án có một số tìm kiếm đàn hồi qua lốp xe.Bỏ qua dấu trọng âm bằng cách sử dụng tìm kiếm đàn hồi và lốp

Tìm kiếm đang hoạt động nhưng làm nổi bật điểm nhấn. Tìm kiếm "this" cần trả về "thís" và "thiš" chẳng hạn.

Tôi đã đọc tài liệu lốp này: http://karmi.github.com/tire/

Cũng như: http://railscasts.com/episodes/306-elasticsearch-part-1?view=asciicast

nào đề cập đến hầu hết các tùy chọn đàn hồi tìm kiếm của có sẵn trong lốp.

tìm kiếm liên quan đến giọng phớt lờ, asciifolding giữ sắp tới, nhưng tìm kiếm đàn hồi chỉ có này để nói về nó:

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

Bên cạnh đó tôi tìm thấy một vài điều về bộ lọc/dấu/etc như thế này:

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

Nhưng tất cả họ đang sử dụng tùy chọn tìm kiếm đàn hồi trần.

Khi tôi cố gắng sử dụng bộ lọc asciifolding trong mã ruby ​​của mình, tôi gặp lỗi về không có bộ lọc nào được xác định cho "asciifolding".

Đây là sự can đảm của tìm kiếm đang được thực hiện trong mã của tôi - làm cách nào tôi có thể sửa đổi điều này để thực hiện tìm kiếm nhấn mạnh. Là nó asciifolding, và nếu như vậy, làm thế nào để tôi tuyên bố nó ở đây?

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 

EDIT: Hoặc có lẽ nó nên được thực hiện trong ánh xạ/lập chỉ mục? Và sau đó chạy lại trình lập chỉ mục. Dưới đây là các bản đồ, tôi đã thử đặt: lọc => "asciifolding" cho một số các chỉ số, nhưng điều đó dường như không làm việc (và cũng không tạo ra bất kỳ đầu ra lỗi):

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 

Trả lời

3

Có một ví dụ rất đẹp của "asciifolding" (xóa dấu trọng âm khỏi mã thông báo khi lập chỉ mục văn bản) trong bài viết này: Autocomplete with Tire

Các vấn đề liên quan