次のように、クライアント サーバー アーキテクチャで Lucene 3.5 を使用しています。クライアントはサーバーにクエリを発行します。サーバーは、クエリで使用された用語のリストと、検索されたドキュメントへの の適用によって生成されたスニペットを含むヒットのリストを返しますHighlighter
。その後、ユーザーはドキュメント全体を表示するように要求できます。このドキュメントは、私が構築しているシステムの一部である別のサービスからのものです。
要求されたドキュメントが表示されたら、それを取得するために使用されたのと同じ用語を強調表示したいと思います。Lucene インフラストラクチャを使用せずにこれを行うための他のコードを書くことはできますが、スニペットを生成するためのコードが既にあるので、それを再利用できることを望んでいました。(ドライなど)
私の質問は、これを行う最善の方法です。検索結果でドキュメントをマークアップする必要がある場合、クライアントは、ドキュメントを取得するために使用された用語のセットと、取得されたドキュメントの ID を持っています。また、ドキュメント内のどのフィールドをクエリ用語でマークアップできるかも認識しています。
いくつかの可能な戦略:
必要なドキュメントのみを選択するクエリ フィルタを作成し、そのドキュメントに対してのみクエリを再実行します。
どういうわけか (どのように?) a
Scorer
に依存しないQuery
が、既に持っている用語をシードできる a を構築します。Lucene インフラストラクチャを完全にスキップします。
ほかに何か?