Hibernate搜索:带空格的单个搜索词

时间:2014-07-07 12:04:53

标签: java hibernate lucene full-text-search hibernate-search

我是休眠搜索的新手。

我正在尝试实现一个结果完全匹配的引擎。

我的持久性类更改

@Field(index=Index.UN_TOKENIZED, store=Store.NO)

private String offerTitle;

实施变更

String[] offerFields = new String[] { "offerTitle"};
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_31,offerFields,new KeywordAnalyzer());
org.apache.lucene.search.Query query = parser.parse(queryString);
org.hibernate.Query offerHibQuery = fullTextSession.createFullTextQuery(query, Offer.class);
List<?> offerResults = offerHibQuery.list();

在搜索词中包含空格之前,它一直正常工作。当搜索词包含空格时,它不会得到任何结果。

例如:对于搜索字词:“Comcast offer name”我没有结果,查询分为offerTitle:Comcast offerTitle:offer offerTitle:name

有没有办法搜索与空格完全匹配?

我试过了:

QueryBuilder queryBuilder_1 = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Offer.class).get();
org.apache.lucene.search.Query offerCode_1 = queryBuilder_1.phrase().onField("offerTitle").sentence(queryString).createQuery();
org.hibernate.Query offerCodeHibQuery = fullTextSession.createFullTextQuery(offerCode_1);
List<?> offerCodeResults = offerCodeHibQuery.list();

它仍无效。

2 个答案:

答案 0 :(得分:1)

您没有对字段进行标记,因此您需要使用单个未分析的字词进行搜索。我发现,最简单的方法是直接使用Lucene API并构建一个TermQuery,如:

Query query = new TermQuery(new Term("offerTitle", queryString));

我认为这也应该有效:

queryBuilder_1.keyword().onField("offerTitle").matching(queryString).createQuery();

答案 1 :(得分:1)

queryBuilder_1.phrase().withSlop(0)
    .onField("offerTitle").sentence(queryString).createQuery()