ライブラリを探しているので、PyLucene を調べましたか?
http://lucene.apache.org/pylucene/features.html
Lucene は通常、完全一致ではなく、ランク付けされた検索 (相対スコアに基づく一致) を実装しますが、正確なフレーズ検索に使用できます。Lucene を使用して正確なフレーズを検索する方法については、次のリンクを参照してください。Javaで書かれていますが、アイデアは次のとおりです。
Lucene を使用した正確なフレーズ検索?
あなたの質問は、特に効率について尋ねました。効率はどのように?ユーザーにとって最速のルックアップ時間を意味していたと思います。ユーザーのルックアップ時間の観点から純粋に速度について話している場合、コーパス内のすべてのドキュメントをインデックス化するための最初の時間を許容できる場合、ドキュメント内のすべての単語を実際にインデックス化するよりも高速な方法はありません。. インデックス作成は 1 回限りのイベントであり、ユーザー検索は頻繁に発生するため、通常はこれが論理的な選択です。ただし、明らかに、これにはかなりのメモリ使用量が伴います。したがって、メモリ使用量の観点から効率性について話している場合は、すべてのドキュメントをループして、各ドキュメントに対して正規表現検索を実行する必要があります。インデックス作成の最初のルックアップ時間を回避したい場合にも、この方法を使用します。ただし、コーパスのサイズが大きい場合、これが論理的な制限要因になる可能性は低く、懸念事項は通常、作成するユーザーを満足させることです。複数のクエリ。
私が指摘する他の唯一のことは、単語だけでなくパターンを検索していると述べたので、パターンのクエリをサポートしようとしている場合、単語のみのインデックス作成は役に立たないということです(そのパターンがドキュメント!)
Lucene を使用せず、代わりに独自に実装したい場合は、逆インデックスを使用したインデックス作成を検討してください。フレーズ クエリを実行する場合に、逆インデックスを作成する方法についての優れた説明を次に示します。
http://www.searchenginepeople.com/blog/how-search-really-works-the-index-2.html