Запрос кажется правильным.Мое предположение состоит в том, что в названии кооператива есть какое-то общее слово (например, «кооператив» или «кооператив»), и запрос на имя кооператива заканчивается совпадением множества различных кооперативов.
Поскольку у вас естьID в качестве ввода, вам лучше будет выполнить запрос непосредственно по кооперативному идентификатору.
Сначала убедитесь, что код кооператива включен в ваш @IndexedEmbedded
:
public class MemberProfile {
// ...
@ManyToOne
@IndexedEmbedded(includeEmbeddedObjectId = true) // Change this
private Cooperative cooperative;
// ...
}
Затемпереиндексировать ваши данные.
Затем измените эту часть кода:
Cooperative cooperative = (Cooperative) dao.searchObject(Cooperative.class, cooperativeId);
FullTextSession fullTextSession = Search.getFullTextSession(dao.getSession());
QueryBuilder qb = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(MemberProfile.class).get();
org.apache.lucene.search.Query cooperativeQuery = qb
.keyword()
.onField("cooperative.cooperativeName")
.matching(cooperative.getCooperativeName())
.createQuery();
на эту:
FullTextSession fullTextSession = Search.getFullTextSession(dao.getSession());
QueryBuilder qb = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(MemberProfile.class).get();
org.apache.lucene.search.Query cooperativeQuery = qb
.keyword()
.onField("cooperative.id")
.matching(cooperativeId)
.createQuery();