干草堆solr和停用词

时间:2016-02-13 10:45:27

标签: python django solr django-haystack django-1.8

我正在尝试使用haystack和solr的停用词功能,但它与它应该做的相反,而不是得到没有结果我得到索引中的所有文档。但这恰好发生在haystack执行查询时,在solr web界面中工作正常。

#versions
Django 1.8
django-haystack 2.4.1
solr 4.10.2

此处solr和haytstack的solr日志查询相同的禁止词“les”:

#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

当查询来自haystack时,在solr端发生了一些事情,他知道这个词是在禁止词中,但它喜欢它将这个词转换为:

*:*

并匹配所有文档,但无法在日志中看到此内容。

也许我应该在我的django项目中创建一个停用词数组,如果这个单词在这个数组中,则返回一个空的searchQuerySet?

我真的很感激对此有一点帮助,我不可能单独解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:1)

停用词是从索引(和查询)中删除的单词,这意味着您的查询只是visible:true。他们不会以任何方式“停止”查询。

一种可能的解决方案可能是只删除索引时间的停用词,同时在查询时对其进行重新调整(使用不同的分析链进行索引和查询),导致查询在未找到令牌时没有命中索引。

但这可能会破坏其他事情,比如当唯一的索引值是“时间变化”时查询“变化时间”。停用词可能不是你想要解决的问题。