2012-09-04 17 views
6

Whos 2.4 ve Django 1.3 ile haystack 1.2.6 kullanıyorum. Bir varsayımsal yazıyı açıklayan aşağıdaki modele sahip olduğumuzu varsayalım. İki (çoklu) alanda Django Haystack otomatik tamamlama

Post(models.Model): 
    title = models.CharField() 
    body = models.TextField() 

Biz vücut alanına otomatik tamamlanması için böyle bizim post endeksi inşa:
PostIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    content_auto = indexes.EdgeNgramField(model_attr='body') 

iyice ı hem başlık ve gövde alanları üzerinde otomatik tamamlama olması mümkün olup olmadığını bulamıyorum samanlık belgeleri okuduktan sonra.

Yani ... bu mümkün mü yoksa ...?

cevap

7

this'u temel alarak bunu yapmayı başardım. Ekstra filtreleme yapmak varsa

sqs = SearchQuerySet().models(Post) 
sqs1 = sqs.filter(title_auto=q) 
sqs2 = sqs.filter(body_auto=q) 

sqs = sqs1 | sqs2 

, bunu yapmak gerekir: Sadece size endeksinde üzerine otomatik tamamlamak istediğiniz her alan için bir EdgeNgramField, daha sonra iki farklı arama Sorgu kümelerini için otomatik tamamlama uygulamak ve bunları bağlamak yapmak otomatik tamamlamadan sonra (en azından benim için çalıştığı tek yol buydu). Bir yayının vücudunda bunu yaparken pahalı olmasına rağmen

3

İşte basit bir yolu var, (şablon & kullanım EdgeNgramField yılında birleştirme yapın:

#In search_indexes.py 
PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 

#In <app>\template\search\index\<app>\post_text.txt 
{{ object.title }} {{object.body}} 

Sonra tüm bu sorgular hem başlık & vücut üzerinde otomatik olarak tamamlayacak

Haystack 2.x

kullanma
sqs = SearchQuerySet().models(Post).autocomplete(text='hello') 

PS