3

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

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

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

query = new WildcardQuery(productCodeTerm);

searcher.search(query, 100);

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

JF32358
JF5215
JF2592

现在,当我尝试搜索 using25, or f2 or f3或除 using only 之外的任何其他内容时j,f,jf,查询没有命中。

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

4

2 回答 2

2

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

  • 小写,
  • 不删除数字,
  • 不会在字母和数字之间的边界处分裂。
于 2012-08-03T08:52:56.397 回答
0

在 lucene 常见问题页面中它说:

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

有关更多信息,请查看此处。

于 2012-08-03T05:59:28.447 回答