Pertanyaan Periksa ejaan menggunakan Solr dan Haystack tidak menunjukkan hasil apa pun


Solr kami berfungsi sebagai

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

berhasil mengembalikan saran ejaan berdasarkan kamus berbasis indeks kami

Namun variabel django-haystack {{saran}} atau bahkan perintah python SearchQuerySet (). Spelling_suggestion ("query") mengembalikan "None".

Kami menggunakan tampilan standar dan url yang disediakan oleh tumpukan jerami.

Aplikasi instal adalah Python 2.7.2, Django 1.3.2, Haystack 2.0, Apache Solr 3.6.1 (berjalan di Jetty standar), PySolr 2.1.

Berikut ini beberapa kode yang kami gunakan:

Di settings.py

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

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

Jadi pertanyaannya adalah: di mana masalah dalam kode untuk menyebabkan 'tumpukan jerami' aplikasi yang dipasang untuk tidak berkomunikasi dengan hasil untuk saran ejaan yang ditemukan Solr? Atau di kata lain, mengapa tumpukan jerami tidak menunjukkan saran ejaan sementara Solr menyediakannya?


4
2017-11-29 22:08


asal


Jawaban:


Apakah Anda memiliki pengaturan INCLUDE_SPELLING yang didefinisikan sebagai True dalam SAMBUNGAN dalam file pengaturan Django Anda? http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#spelling-suggestion

Satu hal yang mungkin berguna adalah untuk melihat dengan tepat apa yang dikirimkan oleh Haystack ke Solr. Anda dapat menambahkan pernyataan cetak ke dalam kelas SolrBackend di backstreet / solr_backend.py di Haystack dalam fungsi pencarian sehingga Anda dapat melihat URL yang digunakan. Itu setidaknya akan menunjukkan kepada Anda jika Haystack melakukan saran pencarian seperti yang diperintahkan.

Anda juga mungkin ingin memeriksa pembaruan Haystack langsung dari repo Github. Perkembangannya ada cukup aktif.


0
2018-01-02 18:42



Saya berjuang dengan kesalahan ini, dan spelling_suggestion tidak menunjukkan apa-apa, sampai saya menambahkan untuk meminta pawang "/ pilih" pemeriksa ejaan komponen. Jadi koneksi default seperti yang dikatakan di atas dan '/ pilih' handler berjalan seperti ini:

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

Adittionally, saya juga menambahkan sebagai atribut RestaurantIndex saya di search_indexes.py, sesuatu seperti:

#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

Dalam hal ini 'teks' akan menjadi bidang Anda sendiri yang akan menjadi saran. Setelah ini, di shell python Anda bisa mengeksekusi ini dan hasilnya akan muncul:

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

spelling = sqs.spelling_suggestion()

Saran saya untuk ini adalah restoran.

Tepuk tangan!

NB: Jika Anda memerlukan konfigurasi tambahan, katakan saja.


0
2017-07-28 08:22