我正在使用Lucene的WildcardQuery执行查询。但我不知道为什么找不到结果。 以下是详细信息。
以下是创建WildcardQuery的代码,以及字段名称的记录:'全名'值:'ABC123DD456CC'是已存在的索引文档。
BooleanQuery booleanQuery = new BooleanQuery();
for (IndexQueryField field : quickSearchFields)
{
Query query = new WildcardQuery(new Term(queryField.getFieldName(),"ABC*DD*CC"));
booleanQuery.add(query, BooleanClause.Occur.SHOULD);
}
代码部分:执行查询:
Session hibernateSession = (Session) em.getDelegate();
FullTextSession session = SwitchSession.getFullTextSession(hibernateSession, specifyIndexName);
// Set Hibernate flushMode
session.setFlushMode(FlushMode.MANUAL);
// Ignore Hibernate Cache
session.setCacheMode(CacheMode.IGNORE);
FullTextQuery query = session.createFullTextQuery(booleanQuery,XXX.class);
List list = query.setFirstResult(1).setMaxResults(100).list();
列表为空,我确信Lucene Document中存在'ABC123DD456CC'。 我只想用WildcardQuery来做。任何帮助都会感激不尽!
答案 0 :(得分:1)
我相信最后一行应该是:
List list = query.setFirstResult(0).setMaxResults(100).list();
由于结果从0开始编号。如果只有一个文档与该搜索匹配,这似乎已经足够了,这可能解释了为什么你什么都没得到(跳过第一个也是唯一一个结果,在索引0)。