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

3
我正在使用Lucene搜索引擎,但它似乎只能找到出现在单词开头的匹配项。
例如: 搜索“one”可以匹配“onematch”或“one day a time”,但不能匹配“loneranger”。
Lucene文档表示不支持搜索字符串前面的通配符,因此我不确定Lucene是否搜索单词之间的匹配项,或者是否只能匹配以搜索项开头的文档。
这是我如何创建索引、构建搜索查询的问题,还是Lucene的限制?
3个回答

3

0

Lucene会在文档中查找搜索词的任何位置,但它不允许您进行通配符查询,其中通配符位于搜索词的前面,因为这样做会表现得非常糟糕。如果这是您关心的功能,您可以通过进行一些低级别的Lucene黑客攻击更改配置标志(感谢有趣的链接),找到已经完成了该黑客攻击的第三方库,或者找到不同的搜索实现(对于足够小的数据集,许多RDBMS引擎内置的搜索已经足够)。


0

您的查询应该是:

"Query query = new WildcardQuery(new Term("contents", "*one*"));"

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

"one" 应该用星号括起来。在查询中,我在 *one 后面加了一个空格,但实际上不应该有空格。没有空格,星号就无法显示,这就是为什么我添加了星号的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接