私はWebアプリを構築しており、フリーテキスト検索にdjangoとSphinxを使用しています。検索をリクエストする前に追加の制限を適用する必要があります。2つのテーブルを検討してください。
エンティティ
ID
タイトル
の
説明
created_by_idupdated_by_idcreated_dateupdated_date
_
_
と
EntityUser
identity_id [
上記の表への
FK
]
joining_user_idis_authorized
created_by_id
updated_by_id
created_dateupdated_date
メインテーブルEntityのRTインデックスを作成しましたが、すべて正常に機能しますが、ユーザーが参加しているエンティティ、つまり特定のuser_idとentity_idが存在する場合、エンティティユーザーにis_authorized=1のレコードのみをクエリします。問題は、文字列フィールドがないため、EntityUserのインデックスを作成できないことです。このテーブルには、ご覧のとおり整数/タイムスタンプしか保持されていません。そのテーブルのインデックスを作成できたとしても、別のidexへのサブクエリを含むクエリをSphinxQLで作成できるかどうかはわかりません。Sphinxが非常に大きなプロジェクトで大成功を収めて使用されたことを知っているので、それがSphinxの制限ではないかと思います-DB /アプリケーションの設計が悪いのか、適切なRTインデックスを作成する方法の知識が漏れているのでしょうか。上記の制限を使用できるように、既存のインデックスを何らかの方法で拡張できますか?
SphinxがMySQL側でレコードのIDを返した後、追加の制限を適用できると考えていましたが、それは機能しません。重みが最も高いN個のレコードが返されますが、追加の制限を適用すると、結果が空になる可能性があります。したがって、検索領域を取得してから、ユーザーが表示できる可能性のあるエンティティに対してのみクエリを実行する必要があります。