Допустим, у меня есть следующие классы. (включены только самые важные вещи)
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();
}
Теперь я хочу иметь возможность искать документы, но не в рамках всего индекса, а просто находить документы, принадлежащие данному клиенту. Единственное, что приходит мне в голову - это добавить ассоциацию в индекс и добавить идентификатор клиента в соответствующее поле поиска. Но это не кажется правильным. Должен быть другой вариант, и это то, о чем я прошу.