Джанго-Хейстек возвращает неожиданные результаты - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь включить 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: Это моя первая встреча с упругим поиском.

...