我正在使用HIbernate搜索(5.8.2)。除主键外,搜索在每个字段上都能顺利进行。当我向它传递任何内容时,它返回一个空列表。我按照hibernate文档,使用@documentId注释作为主键。我错过了什么?
这是我的模特:
@SuppressWarnings("serial")
@Entity
@Indexed
@Table(name = "MAIN",schema="maindb")
public class MAIN implements Serializable {
@Id
@DocumentId
private String poNo; // my primary key which has values like "PO123"
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
private String postatus;
我的搜索功能:
public List<?> search(String poNumber, String status) {
QueryBuilder qb =
fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(MAIN.class).get();
BooleanQuery.Builder finalLuceneQuery = new BooleanQuery.Builder();
org.hibernate.query.Query hibQuery =
fullTextSession.createFullTextQuery(finalLuceneQuery.build(),MAIN.class);
org.apache.lucene.search.Query querypono1 =
qb2.simpleQueryString().onField("poNo").matching(poNumber)
.createQuery();
org.apache.lucene.search.Query queryStatus =
qb.simpleQueryString().onField("po01_status")
.matching("postatus").createQuery();
finalLuceneQuery.add(querypono1, BooleanClause.Occur.MUST);
finalLuceneQuery.add(queryStatus , BooleanClause.Occur.MUST);
hibQuery.setFirstResult(0);
List<?> resultArchive = new ArrayList<String>();
try {
result = hibQuery.getResultList();
} catch (Exception e) {
e.printStackTrace();
// log.log(ERROR, "ERROR FETCHING RESULT LIST FROM DATABASE");
}
return result;
}
答案 0 :(得分:2)
问题是&#34; PO123&#34;转化为&#34; po123&#34;通过简单的查询字符串解析器。我想知道为什么,我必须检查,它可能是一个错误,或者它至少是一个意想不到的行为。
话虽如此,你不应该使用simpleQuery()入口点进行精确匹配。
替换:
org.apache.lucene.search.Query querypono1 = qb2.simpleQueryString().onField("poNo").matching(poNumber).createQuery();
人:
org.apache.lucene.search.Query querypono1 = qb2.keyword().onField("poNo").matching(poNumber).createQuery();
(keyword()而不是simpleQueryString())
我会跟进这个问题,因为它不是我预期的行为。谢谢你提高它。
- &GT; JIRA问题:https://hibernate.atlassian.net/browse/HSEARCH-3039,将包含在即将发布的5.10.0.Final中。