現在、Sphinx 検索エンジンを Python アプリケーションに統合しようとしています。問題は、SphinxQL が一般的な SQL のように OR 句をサポートしていないことです。次のように SELECT で式を記述するなど、使用するハックがいくつかあります。
SELECT id,(field1 = val1 OR field2 = val2) as expr FROM foo_bar WHERE expr = 1;
ただし、文字列は MATCH 関数を使用して処理する必要があるため、文字列では機能しません。そこで、クエリを個別のサブクエリに分割し、得られた結果を結合することにしました。total_found
しかし、適切な META 情報、特にフィールドを取得するにはまだ問題があります。Sphinx は個別のクエリでカウントしますが、これらのクエリから取得された行が交差する可能性があり、それをチェックする能力がありません (データベースが大きい)。
私は解決策があるに違いないと信じています。Sphinxit を使用しています (SphinxAlchemy は、使用している SQLAlchemy とバージョンが競合しています)。
SphinxSearchフォーラムからの再投稿:
テキスト列と数値列も検索する必要があるテーブルがあります。OR 条件でクエリを作成する必要があります。次のような SELECT 式を使用してそれを行う方法があることがわかりました。
SELECT *, quantity>=50 OR quantity=0 AS mycond FROM table1 WHERE mycond = 1;
うまくいけば、文字列属性では機能しません。このクエリは解析されません:
SELECT *, category='foo' OR category='bar' AS mycond FROM table1 WHERE mycond = 1;
しかし、これは Beta 2.2.3 で動作しています:
SELECT * FROM table1 WHERE category='foo';
すべての条件ではなく、いずれかの条件に一致する行の数を見つけるにはどうすればよいですか? いくつかのクエリを実行して、取得したアイテムを 1 つのリストにマージすることはできますが、これらの行が現在データベースにどれだけあるかを確認する必要があります。