2014-05-06 19 views
7

Ben dokümanlar üzerine gittim, ve hatta bir kaç arama geri uçları oluşturduk ama "m hala gerçekten bunları samanlıkta yaptıklarımıza karıştı mı endeksleri miras alan sınıfınızda arama yaptığınız alanları araştırın. SearchIndex, indexes.Indexable veya şablonun içindeki metni arayan arka uç nedir? Birisi bana bunu açıklayabilir mi?Django Haystack. Şablon ve model endekslerinin sorumlulukları

Django haystack'te alanlar sorgulanması gereken tanımlayan bir sınıf şöyle (iyi ki Anladığım nasıl):

class ProductIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr='title', boost=1.75) 
    description = indexes.CharField(model_attr='description') 
    short_description = indexes.CharField(model_attr='short_description') 

    def get_model(self): 
     return Product 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.filter(active=True, 
              published_at__lte=datetime.now()) 

Ayrıca bir şablon oluşturacağız txt tha Bir şey yapacak - Ne olduğundan emin değilim. Arama arka ucunun arama algoritması sırasında bu şablonun üzerinden geçeceğini biliyorum.

{{ object.name }} 
{{ object.description }} 
{{ object.short_description }} 
{% for related in object.related %} 
    {{ related.name }} 
    {{ related.description }} 
{% endfor %} 

{% for category in object.categories.all %} 
    {% if category.active %} 
     {{ category.name }} 
    {% endif %} 
{% endfor %} 

benim endeks sınıfı yok bazı alanları vardır şablonu görebileceğiniz gibi, ancak, bu arama arka ucu göre aranacaktır. Peki neden endekste alanlar var? Dizin sınıfı ve dizin şablonu ruloları nelerdir? Lütfen biri bunu bana açıklayabilir mi.

+0

Seni tamamen anladığımdan emin değilim. Böyle bir arka uç (tercihen kodunda) bazı örnek ekleyin ve aklını karıştırıyor tam olarak ne ayrıntılı olarak açıklayabilir misiniz? Haystack'ın arka planda nasıl çalıştığını soruyor musunuz, genellikle bir özelliği nasıl kullanacağınız konusunda kafanız karışıyor mu? – yuvi

+0

En iyi şekilde yuvi yapabilirdim. Ben tam endeks sınıfı ve indeks şablonun rulo üzerinde amacı ve hangi arka uç tarafından arandığını ne üzerinde sadece gerçekten karıştı. – user2734679

+1

Bu çok daha açık. Sana yardım edebileceğime emin değilim, ama şimdi soru çok daha iyi. Umarım, bazı haystack ninja yakında gelecek! – yuvi

cevap

7

ProductIndex sınıf ana şey burada. Haystack dizine ve hangi yolla edilecek seçmiş alanlara göre indeksine Product modelini bu yapılandırmayı kullanacaktır. Bu konuda daha fazla bilgi edinebilirsiniz here.

bu alana text = indexes.CharField(document=True, use_template=True) tarafından kullanılacak oluşturduk şablonu. Bu şablonda, model veya ilgili modellerden gelen her önemli veriyi neden dahil ettik? Çünkü bu sadece bir alanda arama yapmak istemiyorsanız, tüm verilerde arama sorgusu yapmak için kullanılır.

# filtering on single field 
qs = SearchQuerySet().models(Product).filter(name=query) 

# filtering on multiple fields 
qs = SearchQuerySet().models(Product).filter(name=query).filter(description=query) 

# filtering on all data where ever there is a match 
qs = SearchQuerySet().models(Product).filter(text=query)