HIbernate搜索不返回主键上的搜索结果

时间:2018-03-30 11:22:05

标签: java hibernate orm lucene hibernate-search

我正在使用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;
}

1 个答案:

答案 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中。