2016-04-19 3 views
1

Ich habe eine Controller-Aktion, mit der ich über die Dokumenten-GUID nach Document suchen kann. Das Problem besteht darin, dass die GUIDs mehr als 20 Zeichen enthalten. Ich möchte in der Lage sein, nach dem Dokument zu suchen, indem ich einfach die ersten 5 Zeichen der GUID sage.Wie man einen Rubin auf Schienen elasticsearch fuzzy match.

Was ich zur Zeit haben, ist:

search_params = { sort: { sent_at: :desc } } 

if can_search && params[:document_id].present? 
    search_params[:filter] = { term: { "_id" => params[:document_id] } } 
    @documents = Elasticsearch::Model.search(search_params, [Document]) 
else 
    @documents = Elasticsearch::Model.search(search_params, [Document]).page(params[:page]).per(20) 
end 

Dies funktioniert gut, wenn ich die genaue GUID eingeben. Teilweise Übereinstimmung funktioniert jedoch nicht.

Antwort

0

Sie können mit WildcardQuery wie die

search_params[:filter] = { wildcard: { "_id" => "*#{params[:document_id]}*" } }  
Verwandte Themen