如何使用Lucene在单个术语中找到匹配项

时间:2009-07-06 16:21:13

标签: search lucene

我正在使用Lucene搜索引擎,但它似乎只能找到在术语开头发生的匹配。

例如: 搜索“one”将匹配“onematch”或“one day a time”但不匹配“loneranger”。

Lucene doc说它不支持搜索字符串前面的通配符,因此我不确定Lucene是否搜索了期间匹配,或者只能匹配以搜索词开头的文档。

这是我创建索引的方式,如何构建搜索查询或仅限Lucene的问题?

3 个答案:

答案 0 :(得分:3)

在Stack Overflow [LUCENE.NET] Leading wildcard throws an error"

上的另一篇文章中找到了一些信息

您可以在Query Parser上设置SetAllowLeadingWildcardCharacters属性,以便在搜索过程中允许使用前导通配符。这当然会产生明显的大的性能影响,但允许用户在搜索词中找到匹配项。

答案 1 :(得分:0)

如果搜索词出现在其中的任何位置,Lucene将找到一个文档,但是它不允许您进行通配符查询,其中通配符位于搜索词的前面,因为它执行可怕。如果这是你关心的功能,你将做一些低级Lucene黑客更改配置标志(感谢有趣的链接),找到已经完成该操作的第三方库黑客,或找到不同的搜索实现(对于足够小的数据集,从许多RDBMS引擎内置搜索就足够了。)

答案 2 :(得分:0)

您的查询应该是

“查询查询=新的WildcardQuery(新术语(”内容“,” * one * “));”

其中contents是您要搜索的字段名称。

“one”应附有星号标记。在*之后我在查询中给出了空格,但不应该有任何空格。没有空格*没有显示这就是为什么我加了星。