次のクラスがあるとしましょう。(最も重要なものだけが含まれています)
public class Client {
/* Some Properties */
}
public class ClientDocumentAssociation {
@ManyToOne
private Client client;
/* Some Properties */
}
@Indexed
public class Document {
@OneToOne
private ClientDocumentAssociation clientAssociation;
@Field(name = "text")
private String text;
/* Some Properties */
}
私の基本的なドキュメント検索は次のようになります。
public List<AbstractDocument> searchDocuments(String text) {
if (text == null) {
return newArrayList();
}
FullTextEntityManager ftem = Search.getFullTextEntityManager(entityManagerProvider.get());
MultiFieldQueryParser parser = new MultiFieldQueryParser(DOCUMENT_FIELDS, new StandardAnalyzer());
parser.setDefaultOperator(Operator.AND);
FullTextQuery ftq;
try {
Query q = parser.parse(text + "*");
ftq = ftem.createFullTextQuery(q, Document.class);
ftq.setMaxResults(20);
List<AbstractDocument> results = ftq.getResultList();
return results;
} catch (ParseException e) {
e.printStackTrace();
}
return newArrayList();
}
ここで、ドキュメントを検索できるようにしたいのですが、インデックス全体の範囲ではなく、特定のクライアントに属するドキュメントを検索するだけです。私の頭に浮かぶのは、インデックスに関連付けを追加し、検索の適切なフィールドにクライアントIDを追加することだけです。しかし、それは正しくないようです。別の選択肢が必要であり、それが私が求めているものです。