haystack solr 和停用词
haystack solr and stopwords
我正在尝试将停用词功能与 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 项目中创建一个停用词数组,并且 return 如果该词在此数组中,则创建一个空的 searchQuerySet?
非常感谢您对此提供一点帮助,我不可能一个人遇到这个问题。
谢谢。
停用词是从索引(和查询)中删除的词,这意味着您的查询只是 visible:true
。他们不以任何方式"stop"查询。
一个可能的解决方案可能是只删除索引时间的停用词,同时在查询时重新搜索它们(使用不同的分析链进行索引和查询),导致在找不到标记时查询没有命中在索引中。
但这可能会破坏其他事情,例如在唯一索引值是 "time change" 时查询 "time of change"。停用词可能不是您正在寻找的解决问题的方法。
我正在尝试将停用词功能与 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 项目中创建一个停用词数组,并且 return 如果该词在此数组中,则创建一个空的 searchQuerySet?
非常感谢您对此提供一点帮助,我不可能一个人遇到这个问题。
谢谢。
停用词是从索引(和查询)中删除的词,这意味着您的查询只是 visible:true
。他们不以任何方式"stop"查询。
一个可能的解决方案可能是只删除索引时间的停用词,同时在查询时重新搜索它们(使用不同的分析链进行索引和查询),导致在找不到标记时查询没有命中在索引中。
但这可能会破坏其他事情,例如在唯一索引值是 "time change" 时查询 "time of change"。停用词可能不是您正在寻找的解决问题的方法。