У меня есть поиск стога сена, который имеет следующий 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 как мой поисковый бэкенд.
Вы можете использовать полевые поиски, как описано здесь .
sqs = sqs.filter(program__exact='Health')
Возможно, вы уже решили эту проблему, но я только что наткнулся на ту же проблему с бэкендом Whoosh. Может быть, бэкенды Xapian и Whoosh ведут себя одинаково? Похоже, что Whoosh по умолчанию обрабатывает все поля CharFields и ищет в них с помощью какого-то запроса contains-query. Переход на пользовательский бэкенд, без включенного стеблинга для CharFields, исправил эту проблему для меня.
Надеюсь, это подтолкнет кого-то еще в правильном направлении.