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

时间:2013-03-05 13:32:19

标签: c# lucene wildcard

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

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

我的文字是:

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

当我使用 打开 * 打开 作为搜索字词时,lucene会找到该文字。

当我使用 * 打开 * 时,lucene找不到文字。

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

我想搜索 open 和...

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

我该怎么做?

2 个答案:

答案 0 :(得分:1)

每个默认的前导通配符都被禁用,但是使用Lucene> = 2.1时,有一种方法可以启用它。

  

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

见:Lucene FAQ

答案 1 :(得分:1)

2件事:

1)我会验证Luke会为您提供与查询代码相同的结果。

2)“testopening foo bar”是否有效?