1

Sphinxを介して空のクエリから特定のキーワードを除外することは可能ですか?

私が念頭に置いていたのは、Extended2マッチモードを使用することです。キーワードを除外するために、-or!演算子を使用します。クエリを使用せずにSphinxを介してデータをフェッチするだけで済みます(除外演算子を除く)。

Sphinxでは、次の方法を使用してデータをフェッチします。

$data = $sphinx->query('');

このクエリは、何にも一致する必要のないデータを返します(つまり、すべてのデータを返します。もちろん、クエリの制限に制限されます)。問題は、!を使用してキーワードを追加した場合です。または-演算子、何も返しません。例えば:

$data = $sphinx->query('-google');

$dataとして返されますfalse

たぶん、これが機能する別の方法があります。助けてください。ありがとうございました。

4

2 に答える 2

3

Sphinxは、否定のみのクエリは好きではありません。GetLastError()/ GetLastWarning()をチェックすると、明示的にそのように表示されます。

主な理由は、インデックスを効率的に使用できないことです。Sphinxは、転置インデックスの概念に基づいています。したがって、このクエリを実行するには、すべてのドキュメントのリストをフェッチしてから、キーワードに一致するドキュメントを削除する必要があります。

しかし、あなたはそれを機能させます。すべてのドキュメントに含まれるキーワードをsphinxに指定する必要があります。その後、

$data = $sphinx->query('popularword -google');

単語がない場合は、すべてのドキュメントになります。偽のドキュメントを追加してください:)

sql_query = SELECT id, '__ALL__' as dummy, title .......

その後、

$data = $sphinx->query('__ALL__ -google');

言葉がすべての文書にあるように。

クエリが非常に高速であることを期待しないでください。

于 2012-08-09T18:07:53.367 に答える
2

知る限り、それは不可能です。Sphinxは、コレクション全体の検索を含むクエリの計算に失敗します。

を使用できる両方のオプションについて、-不可能であることがドキュメントに明示的に記載されています。

SPH_MATCH_BOOLEAN

コレクションからのすべてのドキュメントを暗黙的に含む「-dog」のようなクエリは評価できません。

SPH_MATCH_EXTENDED

ただし、クエリは、すべてのドキュメントの暗黙的なリストを使用せずに計算できる必要があります

簡単な答えは:いいえ、それは不可能です。唯一の代替手段は、キーワードの小さなリストにこれを実装する場合、データベースにフラグを追加しtrue、テキストにこのキーワードが含まれる場合に値を設定することです。SetFilter()検索結果からそれらを除外することができます。このトリックを使用して、特定のキーワードのセットを含むドキュメントをリストから除外しています。

于 2012-08-09T17:31:05.130 に答える