我的應用程序使用Hibernate搜索4.5.0.Final,當我嘗試使用一個關鍵字進行搜索時工作正常。但是如果我嘗試使用兩個關鍵字,第二個關鍵字不會被Hibernate Search使用,只有第一個關鍵字被HS考慮。在Hibernate搜索中使用多個關鍵字進行索引搜索
例如,如果我嘗試搜索「詹姆斯」,搜索工作正常,應用程序將返回所有「詹姆斯」我有在索引中。但是如果我試圖搜索「詹姆斯·赫特菲爾德」,結果又是所有「詹姆斯」,而不是名字爲「詹姆斯·赫特菲爾德」的獨特結果。我需要把「詹姆斯·赫特菲爾德」爲「詹姆斯和赫特菲爾德」。
編輯:我犯了一個錯誤。有兩個關鍵字,但是,用「OR」,而不是「與」搜索工作。
我的代碼:
public List<Person> search(String keywords) throws DAOException {
try {
FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(this.entityManager);
QueryBuilder qb = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();
Query query = qb.keyword().onFields("name", "email", "username", "phone").matching(keywords).createQuery();
FullTextQuery fullTextQuery = fullTextEm.createFullTextQuery(query);
fullTextQuery.setProjection("name", "email", "username", "phone");
Sort sortField = new Sort(new SortField("name_order", SortField.STRING));
fullTextQuery.setSort(sortField);
return fullTextQuery.getResultList();
}
catch (Exception e) {
logger.error("Error searching index: " + keywords, e);
throw new DAOException(e);
}
}
獲得?你可以嘗試在匹配()之前調用'ignoreAnalyzer()'嗎? – Thomas
另一種選擇可能是拆分字符串,併發出使用'BooleanJunction'和調用'junction.must(子查詢)'每個單詞的查詢。 – Thomas
我想我沒有使用任何分析儀,因爲我沒有指定任何分析儀。也許我正在使用默認(如果有)。我試圖調用'.ignoreAnalyzer()',現在它找不到任何東西,即使只有一個關鍵字。 –