【发布时间】:2021-06-22 13:25:47
【问题描述】:
假设我存储的 Lucene 文档有一个代表正则表达式的 regex 存储字段。
即doc.add(new StringField("regex", "\d{3}[A-G]\d{2}[A-G]\d{2}", Store.YES));
我的搜索输入类似于123D56G89。
有没有办法在我的 TermQuery 中进行反向匹配并获取与给定输入匹配的所有文档?
来自 RDBMS 背景,MariaDB 有REGEXP 功能。
【问题讨论】:
-
你的意思是匹配除了与上述模式匹配的字符串之外的任何字符串?喜欢
"^(?!\d{3}[A-G]\d{2}[A-G]\d{2}$).*"? -
我的意思是:获取输入
123D56G89,使用其保存的正则表达式匹配该输入的所有文档对其进行评估并返回这些文档(如果有)。 -
这是开箱即用的,还是我必须编写自己的自定义查询类?
-
开箱即用的唯一查询类型 - RegexpQuery - 反过来工作:为查询提供一个正则表达式,用于测试索引数据中的纯字符串。此外,正则表达式的 Lucene 风格是 not full-featured。
-
是这样想的。实现我想要的东西可能有点矫枉过正:(