2

我正在使用 Lucene 的 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 文档中存在“ABC123DD456CC”。我只想用 WildcardQuery 来做。任何帮助将不胜感激!

4

1 回答 1

1

我相信最后一行应该是:

List list = query.setFirstResult(0).setMaxResults(100).list();

由于结果从 0 开始编号。如果只有 1 个文档与该搜索匹配,这似乎很可能,这可能解释了为什么您什么也得不到(在索引 0 处跳过了第一个也是唯一的结果)。

于 2012-10-12T16:31:09.513 回答