Django Haystack точная фильтрация - PullRequest
5 голосов
/ 28 января 2010

У меня есть поиск в стоге сена, который имеет следующий 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')

К сожалению, здесь также создаются объекты из программ «Здоровье \ Другое» и «Здоровье \ Сердечно-сосудистые». Как мне запретить поиску запускать эти другие программы?

Я запускаю Ubuntu 9.10 с Xapian в качестве фонового поиска.

Ответы [ 5 ]

3 голосов
/ 07 июня 2010

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

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

1 голос
/ 28 января 2010

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

sqs = sqs.filter(program__exact='Health')
0 голосов
/ 23 мая 2014

Отказ от ответственности: я поддерживаю Xapian-Haystack.

Я полагаю, это происходит потому, что Xapian-Haystack использовал генератор терминов, который экранировал специальные символы, такие как /.

Итак, в вашем случае, "Health\Other" индексируется как "health" и "other". Это было недавно исправлено в основной ветке Xapian-Haystack, см., Например, здесь .

0 голосов
/ 20 августа 2013

Для бэкэнда solr мне нужно использовать _exact (только одно подчеркивание вместо двух).

0 голосов
/ 04 декабря 2011

используйте "prepare_data" для поля программы и избавьтесь от здоровья \ blabla вещи

...