Lucene を使用して一連の文にインデックスを付けています。私のクエリには2つの「エンティティ」があり、次のような近接クエリを作成します:
"EntityA EntityB"~22
この 2 つのエンティティを含むすべての文を最大 22 文字の範囲で取得したいと考えています。ここで、Lucene Highlighter を使用して、2 つのエンティティ間の単語を取得したいと考えています。このようなコードを使用してコンテンツをフラグメントに分割していますが、2 つのエンティティ間の正確な位置にフラグメントを設定する方法がわかりません。
for (int i = 0; i < numTotalHits; i++) {
int id = hits[i].doc;
Document doc = searcher.doc(hits[i].doc);
String text = doc.get("content");
TokenStream tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), id , "content", analyzer);
String[] frag = getFragmentsWithHighlightedTerms(analyzer, query, "content", text, 10, 10);
for (int j = 0; j < frag.length; j++) {
System.out.println((frag[j].toString()));
}
私の目的は、エンティティ内のテキストを取得することです。たとえば、次のようになります。
entity1 --> Canada
entity2 --> Ottawa
sentence --> Natural Resources Canada, Canadian Forest Service, Ottawa.
result --> , Canadian Forest Service,