2016-02-13 85 views
0

我正在尝试使用haystack和solr的停用词特性,但它的作用与它应该做的相反,而不是得到任何结果我在索引中获得所有文档。但是,当查询由haystack执行时,在solr web界面中工作正常。干草堆solr和停用词

#versions 
Django 1.8 
django-haystack 2.4.1 
solr 4.10.2 

这里Solr的日志中为同一禁用词“LES”既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