2013-08-01 8 views
8

Wygląda na to, że elasticsearch obsługuje zapytania rozmyte (http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/), ale nie mogę wymyślić sposób, aby uzyskać django-haystack przejść w tej opcji.Jak mogę wykonać wyszukiwanie rozmyte za pomocą stinu django-haystack i mechanizmu elasticsearch?

Wkopałem się w wyszukiwanie w Django-Haystack i wygląda na to, że używa ono zapytania "match_all" podczas korzystania z backendu elasticsearch. Czy można uzyskać dopasowanie rozmyte bez konieczności modyfikowania kodu źródłowego django-haystack?

Stóg Źródło: https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py (metoda build_search_kwargs co podejrzewam muszę zmienić)

+0

Dan, czy zrobiłeś jakieś postępy w tej sprawie? – Alp

+1

@Alp - Tak. Skończyło się na tym, że korzystałem z sugestii benynlopa, chociaż zajęło mi to sporo czasu, aby dowiedzieć się, jak sformułować wniosek i na który punkt końcowy również go przesłać. Wtedy zdałem sobie sprawę, że nie było tak konfigurowalne, jak chciałem, skończyło się na kilku krokach wstecz i otrzymaniu większego zestawu wyników wyszukiwania, a następnie przechodzeniu przez nie z moim własnym "rozmytym" algorytmem. –

Odpowiedz

6

Nie trzeba wybulić stogu siana można zaktualizować tę metodę w swoim własnym backend (więcej szczegółów, patrz Stretching Haystack's ElasticSearch Backend). Metoda build_search_kwargs zwraca słownik, dzięki czemu można po prostu zmodyfikować oryginalną wartość zwracaną.

Uwaga: Ten kod jest tylko przykładem tego, jak można zaktualizować swój backend, nie Jak wdrożyć rozmyty wyszukiwania.

class FuzzyBackend(ElasticsearchSearchBackend): 
    def build_search_kwargs(self, query_string, **kwargs): 
     fuzzy = kwargs.pop('fuzzy', False) 
     fuzzy_field = kwargs.pop('min_similarity', '') 
     search_kwargs = super(FuzzyBackend, self).build_search_kwargs(
       query_string, kwargs) 
     if fuzzy: 
      search_kwargs = {'fuzzy': {fuzzy_field: query_string}} 
     return search_kwargs 
+1

To dobre podejście - dziękuję za sugestię. Spróbuję go zintegrować i poinformować, jak to działa. –

Powiązane problemy