在单词的开头使用lucene和通配符

本文关键字:lucene 通配符 单词 开头 | 更新日期: 2023-09-27 18:02:13

我有一个问题使用Lucene。净2.9.4。也许有人能帮我。

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

My Text is:

"您可以使用菜单文件/open来编辑现有的文档"

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

当我使用*打开* lucene找不到文本

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

我想搜索打开

  • foo bar =>不匹配
  • 打开foo bar =>是一个匹配
  • testopen foo bar =>是一个匹配
  • teststopening foo bar =>是一个匹配

我该怎么做?

在单词的开头使用lucene和通配符

默认禁用前导通配符,但在Lucene>=2.1中有一种方法可以启用此功能。

QueryParser不支持

前导通配符(例如*ook)违约。从Lucene 2.1开始,它们可以通过调用QueryParser。setAllowLeadingWildcard(true)。注意,这可以是昂贵的操作:它需要扫描列表中的令牌在整个索引中查找匹配的模式

看到:Lucene FAQ

2件事:

1)我将验证Luke给出的结果与您的查询代码相同。

2)"测试条"是否有效?