我正在使用Lucene的WildcardQuery执行查询,但它没有';行不通

我正在使用Lucene的WildcardQuery执行查询,但它没有';行不通,lucene,hibernate-search,Lucene,Hibernate Search,我正在使用Lucene的WildcardQuery执行查询。但我不知道为什么找不到结果。 详情如下 下面是创建通配符查询的代码,字段名的记录:'Full Name'值:'ABC123DD456CC'是存在的索引文档 BooleanQuery booleanQuery = new BooleanQuery(); for (IndexQueryField field : quickSearchFields) { Query query = new WildcardQuery(new Term

我正在使用Lucene的WildcardQuery执行查询。但我不知道为什么找不到结果。 详情如下

下面是创建通配符查询的代码,字段名的记录:'Full Name'值:'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();
列表是空的,我确信“ABC123DD456CC”存在于Lucene文档中。
我只想用通配符查询来实现它。任何帮助都将是感激的

我认为最后一行应该是:

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

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

嗨,FemtoRgon,非常感谢!我认为这不是重点。我已将1更改为0,但它仍然无法正常工作。除此之外,我认为您的查询没有任何问题。如果它仍然不起作用,我会确保quickSearchFields包含一个字段名为的项,用于您要搜索的内容,并且在您试图搜索的类的定义中,该字段被设置为索引,而不仅仅是存储。您可以通过为要查找的字段创建一个简单的通配符查询来进行测试,并查看是否得到结果,这可能有助于您更轻松地定位问题,以及问题是查询还是数据保存在索引中的方式。也是一个很好的工具,可以准确查看索引中的内容,以及它是否已存储和/或索引,以确保这不是问题。FemtoRgon,我编写了一个自定义分析器,索引到文档中时将分析索引的值,例如“我爱你”,它将被分析为“Ilo lov ove vey eyo you”,这是否意味着“Ilo lov ove vey eyo you”将为每个人编制索引?但在使用通配符查询进行搜索时,它没有任何分析器。如果您输入的值不在“Ilo lov ove vey eyo you”范围内,则无法找到任何内容?是吗?是的,通常您希望对查询应用相同的分析器。以标记化值的方式,任何术语都不可能与提供的查询字符串匹配(通配符查询将尝试匹配单个术语),因为索引的令牌都不够长,无法匹配。使用同一个分析器将使您有所收获,但通配符仍然无法获得很好的结果,因为像“BC*”这样的术语将获得结果,“C*D”不会(在您提供的示例中没有3个字符长的子字符串匹配)。我要说的是,在索引方式和搜索方式之间似乎有点不匹配。