Django Haystack точная фильтрация

У меня есть поиск стога сена, который имеет следующий SearchIndex:

class GrantIndex(indexes.SearchIndex):
    """
    This provides the search index for the Grant application.
    """
    text = indexes.CharField(document=True, use_template=True)
    year = indexes.IntegerField(model_attr='year__year')
    date = indexes.DateField(model_attr='date')
    program = indexes.CharField(model_attr='program__area')
    grantee = indexes.CharField(model_attr='grantee')
    amount = indexes.IntegerField(model_attr='amount')
site.register(Grant, GrantIndex)

Если я хочу искать отфильтровывание каких-либо программ, которые НЕ ЯВЛЯЮТСЯ 'здоровьем', я выполняю следующий запрос:

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()
sqs = sqs.filter(program='Health')

К сожалению, это также производит объекты из программы 'Health\Other' и 'Health\Cardiovascular'. Как я мешаю поиску позволить тем другим программам войти?

Я запускаю Ubuntu 9.10 с Xapian как мой поисковый бэкенд.

5
задан damon 28 January 2010 в 17:35
поделиться

2 ответа

Вы можете использовать полевые поиски, как описано здесь .

sqs = sqs.filter(program__exact='Health')
1
ответ дан 15 December 2019 в 01:01
поделиться

Возможно, вы уже решили эту проблему, но я только что наткнулся на ту же проблему с бэкендом Whoosh. Может быть, бэкенды Xapian и Whoosh ведут себя одинаково? Похоже, что Whoosh по умолчанию обрабатывает все поля CharFields и ищет в них с помощью какого-то запроса contains-query. Переход на пользовательский бэкенд, без включенного стеблинга для CharFields, исправил эту проблему для меня.

Надеюсь, это подтолкнет кого-то еще в правильном направлении.

3
ответ дан 15 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: