2017-02-21 32 views
0

Хорошо, поэтому я пытаюсь реализовать автозаполнение в поле поиска с помощью haystack и solr в моем проекте django, но я продолжаю работать в 'reduce() пустой последовательности без ошибки начального значения. Я не уверен, как это может быть из-за того, что когда я перестраиваю свой индекс, я вижу, что он индексирует более 200 троек в моей БД.haystack autocomplete повышение нечетной ошибки

Я не уверен, что правильно понимаю модуль SQS, и я надеялся, что кто-то может указать мне в правильном направлении.

Я хочу использовать поля Тройной модели в качестве предложений автозаполнения при поиске.

моя модель, индекс и вид:

MODEL: 

# Create your models here. 
class Triple(models.Model): 
    studies = models.ForeignKey(Studies, on_delete=models.CASCADE) 

    Subject = models.CharField(max_length=550, default='') 
    Predicate = models.CharField(max_length=550, default='') 
    Object = models.CharField(max_length=550, default='') 

    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    def __unicode__(self): 
     return '%s %s %s' % (self.Subject, self.Predicate, self.Object) 

    def __str__(self): 
     return '%s %s %s' % (self.Subject, self.Predicate, self.Object) 

    def get_absolute_url(self): 
     return reverse("queries:detail", kwargs={"id": self.id}) 


INDEX: 

class TripleIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    link = indexes.CharField(model_attr='studies') 

    content_auto = indexes.EdgeNgramField(model_attr='Object') 


    def get_model(self): 
     return Triple 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

проблема, на мой взгляд, кажется, проистекают из этой линии:

sqs = SearchQuerySet().autocomplete(content_auto=request.GET.get('q', ''))[:5] 

ответ

0

Какие входы autocomplete, которые дают вам эту ошибку?

Я думаю, что потенциальная передача пустой строки может привести к ошибке.

+0

Я не уверен, что вы подразумеваете под входами в автозаполнение. Вы говорите об индексе EdgeNgramField? – jdv12

+0

Я просто имел в виду значение complete_auto, которое вы передали в SearchQuerySet(). Autocomplete() – user6731765

+0

О, я думаю, я вижу, что я делаю неправильно. Я передаю ему search_query, а не термин query set, который я хочу использовать для автозаполнения. Теперь я пробую эти две строки. autocontent = Triple.objects.all() sqs = SearchQuerySet(). autocomplete (content_auto = 'autocontent') – jdv12