3

我们的 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 提供的标准视图和 url。

安装应用程序是 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>

所以问题是:代码中的问题在哪里导致已安装的应用程序“干草堆”无法与 Solr 找到的拼写建议的结果进行通信?或者换句话说,为什么 haystack 没有显示拼写建议,而 Solr 提供了一些拼写建议?

4

2 回答 2

0

您是否在 Django 设置文件的 CONNECTIONS 中将 INCLUDE_SPELLING 设置定义为 True?http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#spelling-suggestion

可能有帮助的一件事是查看 Haystack 发送给 Solr 的确切内容。您可以在搜索功能的 Haystack 的 backends/solr_backend.py 中的 SolrBackend 类中添加打印语句,以便您可以看到正在使用的 URL。这至少会告诉你 Haystack 是否按顺序执行搜索建议。

您可能还想直接从 Github 存储库检查 Haystack 更新。那里的发展相当活跃

于 2013-01-02T18:42:45.220 回答
0

我一直在努力解决这个错误,并且 spelling_suggestion 没有显示任何内容,直到我添加到请求处理程序“/select”组件拼写检查器。所以默认连接如上所述,'/select' 处理程序如下所示:

<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

在这种情况下,“文本”将是您自己的建议字段。在此之后,在 python shell 中你可以执行这个并且结果会出现:

sqs = SearchQuerySet().auto_query('Restauront')

spelling = sqs.spelling_suggestion()

我对此的建议是餐厅。

干杯!

PS:如果您需要额外的配置,请说出来。

于 2015-07-28T08:22:58.627 回答