2016-02-13 4 views
0

Я пытаюсь использовать функцию стоп-логов с haystack и solr, но он делает противоположное тому, что он должен делать, вместо того, чтобы получать результаты, я получаю все документы в индексе. Но это происходит, когда запрос выполняется сторой сенами, в веб-интерфейсе solr, который работает нормально.haystack solr and stopwords

#versions 
Django 1.8 
django-haystack 2.4.1 
solr 4.10.2 

здесь журнал Solr как для Solr и haytstack запроса на тот же стоп-слово «лес»:

#solr 
INFO - 2016-02-13 10:14:26.520; org.apache.solr.core.SolrCore; [collection1] webapp=/solr path=/select params={indent=true&q=les&_=1455358468201&wt=json} hits=0 status=0 QTime=0 

#haystack 
INFO - 2016-02-13 10:16:00.372; org.apache.solr.core.SolrCore; [collection1] webapp=/solr path=/select/ params={fl=*+score&sort=cname+asc,+pub_date+desc&start=0&q=(visible:(true)+AND+(les))&wt=json&fq=django_ct:(nav.pages+OR+nav.rubrique+OR+annuaire_commerces.adressecommerce+OR+agenda.event+OR+news.actualite+OR+annuaire_associations.adresseassoc)&rows=70} hits=70 status=0 QTime=3 

#views 
from haystack.generic_views import SearchView 
class search(SearchView): 
    template_name = 'search/search1.html' 
    form_class = searchForm 

    def get_queryset(self): 
     queryset = super(search, self).get_queryset() 
     q = queryset.filter(visible = True).order_by('cname','-pub_date') 
     return q 

Что-то случилось в стороне Solr, когда запрос пришел из стога, он знает слово в но это как бы преобразует это слово в:

*:* 

и соответствует всем документам, но не может видеть это в журнале.

Возможно, я должен создать массив стоп-слов в моем проекте django и вернуть пустой searchQuerySet, если это слово в этом массиве?

Я бы очень признателен за небольшую помощь в этом, его единственное, что не возможно для этого.

Спасибо.

ответ

1

Стоп-слова - это слова, которые удаляются из индекса (и запроса), что означает, что ваш запрос равен visible:true. Они не «останавливают» запрос каким-либо образом.

Возможное решение может заключаться в том, чтобы просто удалить стоп-слова по индексу, при их повторной установке при запросе (с другой цепочкой анализа для индексирования и запросов), в результате чего запрос не получает никаких ударов, когда токен не найден в индекс.

Но это могло бы сломать другие вещи, например, запросить «время изменения», когда единственным индексированным значением является «изменение времени». Стоп-слова могут быть не тем, что вы ищете, чтобы решить проблему, с которой вы сталкиваетесь.

+0

Если я удаляю действие фильтра, я найду другой способ фильтрации. благодаря – V1ce

Смежные вопросы