我需要在Django应用程序中集成拼写检查机制。我发现Haystack有“拼写建议”的方法来使用它。所以我用Django(1.4.1)安装了haysatck的最新dev版本(2.0.0 beta)。
我已经下载了apache-solr-3.6.0并在doc中进行了配置。
schema.xml中
./ manage.py build_solr_schema>的solr-3.6.0 /示例/ solr的/ CONF / schema.xml中
安装MyApps / mysearch_index.py
from haystack import indexes
class MovieIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True,use_template=True)
# other field definition
suggestions = indexes.FacetCharField()
def prepare(self, obj):
prepared_data = super(NoteIndex, self).prepare(obj)
prepared_data['suggestions'] = prepared_data['text']
return prepared_data
solrconfig.xml中
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">suggestions</str>
<str name="spellcheckIndexDir">./spellchecker</str>
<str name="accuracy">0.7</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler name="/spell" class="solr.SearchHandler">
<lst name="defaults">
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
settings.py
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8983/solr',
'TIMEOUT': 60 * 5,
'INCLUDE_SPELLING': True,
},
}
重新启动solr搜索引擎
cd examples/solr
java -jar start.jar
重建索引
python manage.py rebuild_index
# 9905 entries indexed
通过django shell进行测试
In [1]: from haystack.query import SearchQuerySet
In [2]: len(SearchQuerySet())
Out[3]: 9905
In [4]: sqs = SearchQuerySet().auto_query('spider')
In [5]: suggestion = sqs.spelling_suggestion()
In [6]: print suggestion
None
In [7]:
我已经通过了几个bolgs和论坛并尝试了很多设置,但是spelling_suggestion总是没有。
任何人都可以帮助我吗?
感谢您阅读此帖
答案 0 :(得分:0)
您必须在solr config中为默认请求处理程序启用拼写检查。您在问题中提到的干草堆文档中也提到了该步骤。
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
如果没有这样做,那么这应该解决它。如果您仍然遇到问题或者此步骤也已完成,那么我认为您应该尝试直接在浏览器中查询solr以检查建议是否在那里工作,因为这将确保您的solr设置正确。
如果您仍然遇到问题,请告诉我,我会亲自尝试。