2013-08-01 10 views
8

Elasticsearch bulanık sorguları destekliyor mu (http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/) gibi görünüyor, ancak bu seçenekte django-haystack geçirmenin bir yolu olduğunu anlayamıyorum.Django-haystack ve elasticsearch arka ucunu kullanarak bulanık bir arama yapabilirim?

Django-haystack aramasında arama yaptım ve elasticsearch arka ucunu kullanırken 'match_all' sorgusunu kullanıyor gibi görünüyor. Django-haystack kaynak kodunu değiştirmek zorunda kalmadan bulanık eşleşme davranışını almak mümkün mü?

Haystack Kaynak: https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py

+0

Dan, bu konuda herhangi bir ilerleme kaydettiniz mi? – Alp

+1

@Alp - Yep. Bennylope'un önerisini kullanarak sona erdi, ancak isteği nasıl yapılandıracağımı ve bunu sunmak için son noktayı bulmam biraz zaman aldı. Sonra istediğim gibi konfigüre edilemediğini fark ettim, böylece birkaç adım geri aldım ve daha geniş bir arama sonuçları kümesini geri aldım ve sonra kendi "bulanık" algoritmamla onlara geçtim. –

cevap

6

Haystack çatal gerek yok, kendi arka uç bu yöntemi güncelleyebilirsiniz (ayrıntılı bilgi için, Stretching Haystack's ElasticSearch Backend bakınız) (build_search_kwargs yöntemi ben değiştirmem gerekiyor şüpheli budur). build_search_kwargs yöntemi bir sözlük döndürür, böylece orijinal dönüş değerini değiştirebilirsiniz.

Yasal Uyarı: Bu kod, kendi arka uç, bulanık arama uygulamak için değil nasıl güncelleme nasıl sadece bir örnektir.

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

Bu iyi bir yaklaşım - bunu önerdiğiniz için teşekkürler. Bütünleştirmeyi deneyeceğim ve nasıl gittiğini anlatayım. –

İlgili konular