WildcardQuery没有返回正确的结果

时间:2012-08-03 05:46:04

标签: java search lucene wildcard

我使用一些数据创建了一个索引。现在我使用WildcardQuery来搜索这些数据。索引的文档具有我正在搜索的字段名Product Code

以下是我用于创建查询和搜索的代码:

Term productCodeTerm = new Term("Product Code", "*"+searchText+"*");

query = new WildcardQuery(productCodeTerm);

searcher.search(query, 100);

searchText变量包含用于搜索索引的搜索字符串。如果searchString是'jf',我会得到以下结果:

JF32358
JF5215
JF2592

现在,当我尝试使用25, or f2 or f3或除了仅使用j,f,jf之外的任何其他内容进行搜索时,查询没有匹配。

我无法理解为什么会这样。有人可以帮助我理解搜索以这种方式表现的原因吗?

2 个答案:

答案 0 :(得分:2)

您在索引时使用了什么分析器?根据您的示例,您应该确保您的分析器:

  • 做小写,
  • 不会删除数字,
  • 不会在字母和数字之间的边界处分割。

答案 1 :(得分:0)

在lucene FAQ页面中说:

  

QueryParser by不支持前导通配符(例如* ook)   默认。从Lucene 2.1开始,可以通过调用启用它们   QueryParser.setAllowLeadingWildcard(true)。请注意,这可以是一个   昂贵的操作:它需要扫描令牌列表   完全索引以查找与模式匹配的那些。

有关详细信息,请查看here.