3

Our Solr build is functioning as

     http://192.168.1.106:8983/solr/spell?q=query&spellcheck=true&spellcheck.build=true 

does successfully return spelling suggestions based off our index based dictionary

However the django-haystack variable {{suggestion}} or even python command SearchQuerySet().spelling_suggestion("query") return "None".

We use the standard view and url provided by haystack.

The install apps are Python 2.7.2, Django 1.3.2, Haystack 2.0, Apache Solr 3.6.1 (running on standard Jetty), PySolr 2.1.

Here is some of the code we are using:

In settings.py

    HAYSTACK_CONNECTIONS = {
        'default': {
           'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
           'URL': 'http://192.168.1.106:8983/solr',
           'INCLUDE_SPELLING': True,
        },
    }

In /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>

So the question is: where is the issue in the code to cause the installed app 'haystack' to not communicate with the results for spelling suggestions Solr is finding? Or in otherwords, why does haystack show no spelling suggestions while Solr provides some?

4

2 に答える 2

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 シェルでこれを実行すると、結果が表示されます。

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

spelling = sqs.spelling_suggestion()

これに対する私の提案はレストランです。

乾杯!

PS: 追加の設定が必要な場合は、そのまま言ってください。

于 2015-07-28T08:22:58.627 に答える
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 クラスに print ステートメントを追加すると、使用されている URL を確認できます。少なくとも、Haystack が検索の提案を注文どおりに行っているかどうかが表示されます。

また、Github リポジトリから直接 Haystack の更新を確認することもできます。そこでの開発はかなり活発です。

于 2013-01-02T18:42:45.220 に答える