У нас есть около 9k документов, индексированных с использованием Haystack 1.2.7 с Whoosh 2.4.1 в качестве бэкэнд. Несмотря на использование Haystack, это похоже на проблему Whoosh. Посмотрите на моих случаях отладки:Whoosh: не следует ИЛИ только увеличивать результаты?
1) Если я просто запустить точный поиск, Whoosh находит свой документ (как показано ниже):
>>> SearchQuerySet().all().models(PedidoSaida).filter(numero__exact='6210202443/10')
[<SearchResult: logistica.pedidosaida (pk=u'6')>]
2) Если бы я просто запустить StartsWith поиск, Свист Безразлично «т найти свой документ (как показано ниже):
>>> SearchQuerySet().all().models(PedidoSaida).filter(numero__startswith='6210202443/10')
[]
3) Если я ставлю все вместе в одном или запросе, Свист все еще не находит мой документ (как показано ниже):
>>> SearchQuerySet().all().models(PedidoSaida).filter(SQ(numero__exact='6210202443/10') | SQ(numero__startswith='6210202443/10'))
[]
44 +44516410617451515053691368888
Взглянув в запросах, которые Стог посылает Свист, мы имеем:
>>> str(SearchQuerySet().all().models(PedidoSaida).filter(numero__exact='6210202443/10').query)
'(numero:6210202443/10) AND (django_ct:logistica.pedidosaida)'
>>> str(SearchQuerySet().all().models(PedidoSaida).filter(numero__startswith='6210202443/10').query)
'(numero:6210202443/10*) AND (django_ct:logistica.pedidosaida)'
>>> str(SearchQuerySet().all().models(PedidoSaida).filter(SQ(numero__exact='6210202443/10') | SQ(numero__startswith='6210202443/10')).query)
'((numero:6210202443/10 OR numero:6210202443/10*)) AND (django_ct:logistica.pedidosaida)'
Как вы можете заметить, последний запрос в точности (первый или второй). Не стоит ли мне искать мой документ? Я не вижу, где моя логика ошибочна: я использую OR, и она находит меньше, чем когда я использую одно из операторов.
Я также считаю странным, что Whoosh находит мой документ с первым запросом (numero: 6210202443/10), но не со вторым (numero: 6210202443/10 *). Но я предполагаю, что это связано с StemmingAnalyzer, который Haystack использует в моем CharField. Я подробно рассмотрю это после.
Я не думал об использовании QueryParser, спасибо :) – msbrogli