我们的Solr版本正在运行
http://192.168.1.106:8983/solr/spell?q=query&spellcheck=true&spellcheck.build=true
根据基于索引的词典
成功返回拼写建议然而,django-haystack变量{{suggestion}}甚至python命令SearchQuerySet()。spelling_suggestion(“query”)返回“None”。
我们使用haystack提供的标准视图和网址。
安装应用是 Python 2.7.2,Django 1.3.2, Haystack 2.0,Apache Solr 3.6.1(在标准Jetty上运行),PySolr 2.1。
以下是我们使用的一些代码:
在settings.py中
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://192.168.1.106:8983/solr',
'INCLUDE_SPELLING': True,
},
}
在/PATH/TO/SOLR/example/solr/conf/solrconfig.xml中:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">text</str>
<str name="spellcheckIndexDir">spellchecker</str>
</lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">10</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
所以问题是:代码中的问题在哪里导致已安装的应用程序'haystack'无法与Solr发现的拼写建议的结果进行通信?或者换句话说,为什么当Solr提供一些时,haystack没有显示拼写建议?
答案 0 :(得分:0)
您是否在Django设置文件的CONNECTIONS中将INCLUDE_SPELLING设置定义为True? http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#spelling-suggestion
可能有用的一件事是确切了解Haystack向Solr发送的内容。您可以在搜索功能的Haystack后端/ solr_backend.py中的SolrBackend类中添加print语句,以便您可以看到正在使用的URL。这至少会告诉你Haystack是否正按照命令进行搜索建议。
您可能还想直接从Github repo检查Haystack更新。那里的发展是pretty active。
答案 1 :(得分:0)
我正在努力解决这个错误,并且spelling_suggestion并没有显示任何内容,直到我添加到请求处理程序&#34; / select&#34;组件拼写检查器。所以默认连接如上所述和&#39; / select&#39;处理程序是这样的:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
另外,我还在search_indexes.py中添加了我的RestaurantIndex属性,类似于:
#Suggestions - so obvious
suggestions = indexes.CharField()
def prepare(self, obj):
prepared_data = super(RestaurantIndex, self).prepare(obj)
prepared_data['suggestions'] = prepared_data['text']
return prepared_data
在这种情况下&#39; text&#39;将是你自己的领域,这将是建议。 在此之后,在python shell中你可以执行它并得出结果:
sqs = SearchQuerySet().auto_query('Restauront')
spelling = sqs.spelling_suggestion()
我对此的建议是餐厅。
干杯!
PS:如果您需要额外配置,请说出来。