Apache Lucene で提供されるヒット ハイライターに関して 2 つの質問があります。
この関数を参照してください。トークン ストリーム パラメータの使用について説明していただけますか。
多くのフィールドを含むいくつかの大きな lucene ドキュメントがあり、各フィールドにはいくつかの文字列が含まれています。これで、特定のクエリに最も関連するドキュメントが見つかりました。クエリ内のいくつかの単語がドキュメント内の単語と一致した可能性があるため、このドキュメントが見つかりました。クエリ内のどの単語がこれを引き起こしたのかを知りたいです。そのため、Lucene Hit Highlighter を使用する予定です。例: クエリが「skin doctor delhi」で、「dermatologist」というタイトルのドキュメントに「skin」と「doctor」という単語が含まれている場合、ヒットを強調表示した後、クエリから「skin」と「doctor」を分離できるはずです。私はこの数週間、このためのコードを書こうとしてきました。欲しいものを手に入れることができません。私を手伝ってくれますか?
前もって感謝します。
アップデート:
現在のアプローチ: ドキュメント内のすべての単語を含むクエリを作成します。
Field[] field = doc.getFields("description");
String desc = "";
for (int j = 0; j < field.length; ++j) {
desc += field[j].stringValue() + " ";
}
Query q = qp.parse(desc);
QueryScorer scorer = new QueryScorer(q, reader, "description");
Highlighter highlighter = new Highlighter(scorer);
String fragment = highlighter.getBestFragment(analyzer, "description", text);
小さな文書には機能しますが、大きな文書には機能しません。次のスタックトレースが取得されます。
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:152)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:891)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:866)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1213)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1167)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:182)
このアプローチが大規模なドキュメントに対して不合理であることは明らかです。これを修正するにはどうすればよいですか?
ところで、私は FuzzyQuery マッチングを使用しています。