1

我在使用 Lucene.NET 2.9.4 时遇到问题。也许有人可以帮助我。

目前,当用户输入单词open时,我会自动将 search therm 更改为* open *。我已经设置了 QueryParser.SetAllowLeadingWildcard(true); 我知道,这可能很贵...

我的文字是:

您可以使用菜单文件/打开来编辑现有文档

当我使用open *open作为搜索词时,lucene 会找到文本。

当我使用* open * lucene 时找不到文本。

为什么不?前导通配符有什么问题?我想在单词的开头、结尾和中间找到搜索词。

我想搜索开放和...

  • foo bar => 不匹配
  • 打开 foo bar => 是一场比赛
  • testopen foo bar => 是匹配的
  • testopening foo bar => 是匹配的

我怎样才能做到这一点?

4

2 回答 2

1

默认情况下,前导通配符被禁用,但是使用 Lucene >=2.1 有一种方法可以启用它。

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

请参阅:Lucene 常见问题解答

于 2013-03-05T14:24:41.430 回答
1

2件事:

1)我会验证Luke给你的结果与你的查询代码相同。

2)“testopening foo bar”是有效还是失败?

于 2013-03-29T21:08:51.957 回答