Я пытаюсь включить django-haystack в блог.
Вот моя Post
модель:
class Post(models.Model):
slug = models.CharField(max_length=2000)
title = models.CharField(max_length=2000)
content = models.TextField(blank=True)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
def __str__(self):
return self.title
Вот как код в search_indexes.py
файле:
class PostIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
content = indexes.CharField(model_attr='content')
def get_model(self):
return Post
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(created_on__lte=datetime.datetime.now())
Как видите, я использую тип EdgeNgramField
для поиска неполных терминов.
Теперь, если я ищу термин elastic
, как и ожидалось, стог сена возвращает сообщение, содержащее elastic
где-нибудь либо поле title
, либо content
. Однако стог сена также возвращает некоторые дополнительные сообщения, которые не имеют термина elastic
ни в title
, ни в content
.
Как я могу это исправить?
Я тестировал этот код на: django-haystack (2.8.1) ,asticsearch-2.4.2 и django-1.11
PS: Это моя первая встреча с упругим поиском.