我使用lucene 8.11.1版本, WildcardQuery 使用中发现 “消息”无法匹配到数据,“消”则能匹配到数据,如下面的截图演示:
截图一:没有添加 WildcardQuery 的情况检索到6条记录,其中有两条记录包含关键字“消息”;
截图二:添加 WildcardQuery 匹配“消息”,返回结果集是空;
截图三:添加 WildcardQuery 匹配“消”,返回2条记录;
在 WildcardQuery 中使用 “*”可以匹配[0,多个字符],是什么原因导致截图中的差异呢?
您在使用WildcardQuery时遇到了一些问题。在Lucene中,WildcardQuery用于在搜索时匹配具有通配符前缀或后缀的字符串。通配符“”表示任意数量的字符。
从您的截图中,我看到您在构造WildcardQuery时使用了“”通配符,但是没有指定它是前缀还是后缀。在Lucene中,如果未指定通配符的前缀/后缀,它将默认为前缀。因此,您的查询将尝试匹配以“消息”开头的文档,而不是包含“消息”的文档。
要正确匹配包含“消息”的文档,您需要将通配符设置为后缀。您可以通过在通配符后添加一个问号(?)来实现这一点。问号表示任意单个字符。因此,“消息?”将匹配以“消息”结尾的文档。
这是一个修改后的示例查询,用于匹配包含“消息”的文档:
new WildcardQuery(new Term("config_name", "消息?"))
请注意,您需要根据实际情况调整查询中的字段和通配符。如果您使用的是Lucene 8.11.1,那么您可能需要使用cn.juque.jdfs.lucene.query.WildcardQuery类来创建WildcardQuery对象。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。