2

2つの問題が1つの質問にまとめられています。

haystack auto_queryが2つのリクエストをsolrに送信し、:文字をエスケープするのはなぜですか?

マニュアルに記載されているとおりにhaystackを設定しましたが、すべて正常に実行されていますが、solrログを調整するたびに、haystackからのリクエスト(1つのクエリ)と管理ページからのリクエストが1つ表示されます。

だから私はクエリします:

title:ong

Haystackから次のようになります。

Jul 12, 2012 2:37:30 PM org.apache.solr.core.SolrCore execute
INFO: [collection1] webapp=/solr path=/select/ params={spellcheck=true&sort=cand+desc&fl=*+score&start=0&q=(title\:ong)&spellcheck.count=1&spellcheck.collate=true&wt=json&fq=django_ct:(ads.model1+OR+ads.model2+OR+ads.model3)&rows=1} hits=0 status=0 QTime=21
Jul 12, 2012 2:37:30 PM org.apache.solr.core.SolrCore execute
INFO: [collection1] webapp=/solr path=/select/ params={spellcheck=true&sort=cand+desc&fl=*+score&start=0&q=(title\:ong)&spellcheck.count=1&spellcheck.collate=true&wt=json&fq=django_ct:(ads.model1+OR+ads.model2+OR+ads.model3)&rows=0} hits=0 status=0 QTime=23

管理セクションから:

Jul 12, 2012 2:42:35 PM org.apache.solr.core.SolrCore execute
INFO: [collection1] webapp=/solr path=/select params={spellcheck=true&indent=true&q=title:ong&wt=json} hits=2 status=0 QTime=12

ヘイスタックリクエストには追加のパラメータが存在しますが、これは理解できます。

ご覧のとおり、qパラメーターは同じです。

ほぼ同じです。haystackauto_queryが:文字をエスケープして2つのリクエストを送信する理由は誰でもわかりますか?

:がエスケープされているため、Solrはフィールド「title」から「ong」を返さず、文字列としてtitle \:ongを検索します。もちろん、何も返しません。

4

1 に答える 1

2

なぜそれがコロンチャーから逃げるのかを知りました。AutoQueryがデフォルトでそれらをクリーンアップするためです

class AutoQuery(BaseInput):
....
def prepare(self, query_obj):
....
    for token in tokens:
        if not token:
            continue
        if token in exacts:
            query_bits.append(Exact(token, clean=True).prepare(query_obj))
        elif token.startswith('-') and len(token) > 1:
            # This might break Xapian. Check on this.
            query_bits.append(Not(token[1:]).prepare(query_obj))
        else:
            query_bits.append(Clean(token).prepare(query_obj))

なぜそれが2つのリクエストを発行するのかまだ探しています...

これまでの最新の編集:

このビットのために2つのリクエストを送信します

    if self.results and hasattr(self.results, 'query') and self.results.query.backend.include_spelling:
        context['suggestion'] = self.form.get_suggestion()

SearchView()。create_response()で

于 2012-07-12T13:09:56.057 に答える