Spellcheck使用Solr和Haystack没有显示任何结果

时间:2012-11-29 22:08:47

标签: django solr spell-checking django-haystack

我们的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没有显示拼写建议?

2 个答案:

答案 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:如果您需要额外配置,请说出来。