开发者社区> 问答> 正文

lucene WildcardQuery 使用“*”号匹配的疑问

我使用lucene 8.11.1版本, WildcardQuery 使用中发现 “消息”无法匹配到数据,“”则能匹配到数据,如下面的截图演示:

  • 截图一:没有添加 WildcardQuery 的情况检索到6条记录,其中有两条记录包含关键字“消息”;
    image.png

  • 截图二:添加 WildcardQuery 匹配“消息”,返回结果集是空;
    image.png

  • 截图三:添加 WildcardQuery 匹配“”,返回2条记录;
    image.png

在 WildcardQuery 中使用 “*”可以匹配[0,多个字符],是什么原因导致截图中的差异呢?

展开
收起
游客cvq4gxuoh3v5s 2023-12-22 16:57:28 38 0
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    您在使用WildcardQuery时遇到了一些问题。在Lucene中,WildcardQuery用于在搜索时匹配具有通配符前缀或后缀的字符串。通配符“”表示任意数量的字符。
    从您的截图中,我看到您在构造WildcardQuery时使用了“”通配符,但是没有指定它是前缀还是后缀。在Lucene中,如果未指定通配符的前缀/后缀,它将默认为前缀。因此,您的查询将尝试匹配以“消息”开头的文档,而不是包含“消息”的文档。
    要正确匹配包含“消息”的文档,您需要将通配符设置为后缀。您可以通过在通配符后添加一个问号(?)来实现这一点。问号表示任意单个字符。因此,“消息?”将匹配以“消息”结尾的文档。
    这是一个修改后的示例查询,用于匹配包含“消息”的文档:

    new WildcardQuery(new Term("config_name", "消息?"))

    请注意,您需要根据实际情况调整查询中的字段和通配符。如果您使用的是Lucene 8.11.1,那么您可能需要使用cn.juque.jdfs.lucene.query.WildcardQuery类来创建WildcardQuery对象。

    2023-12-23 08:36:15
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载