正则表达式允许使用以下所示的模式匹配语法。
我正在尝试实现一个功能强大的搜索工具,该工具可以实现尽可能多的搜索工具。
有人告诉我edismax是工作中最灵活的工具。
下列哪个模式匹配表达式可以用edismax完成?我可以比edismax做得更好吗?您能否建议我可以使用哪些过滤器和解析器补丁来实现此功能?我是否在梦想我是否认为Solr可以在这类搜索中获得可接受的性能(即服务器端处理时间)?
mysql正则表达式语法和来自ojit_a 的示例
'fofo' REGEXP '^fo' => true
'fo\no' REGEXP '^fo\no$' => true
'Baaaan' REGEXP 'Ba*n' => true
'Baan' REGEXP '^Ba?n => false'
'Bn' REGEXP 'Ba+n' => false
'pi' REGEXP 'pi|apa' => true
'pipi' REGEXP '^(pi)*$' => true
'aXbc' REGEXP '[a-dXYZ]' => true
'abcde' REGEXP 'a[bcd]{3}e' => true
'justalnums' REGEXP '[[:alnum:]]+' => true
最佳答案
Lucene的4.0版将使用特殊语法在标准查询解析器中直接支持正则表达式查询。我验证了它可以在我正在运行的Solr实例上运行,该实例是从二月份的subversion中继构建的。
Jira ticket 2604使用特殊的正则表达式语法描述标准查询解析器的扩展,使用正斜杠定界正则表达式,类似于Javascript中的语法。似乎正在使用基础RegexpQuery解析器。
举个简单的例子:
body:/[0-9]{5}/
将与我已编入索引的文本语料库中的五位数邮政编码匹配。但是,奇怪的是,
body:/\d{5}/
对我不起作用,并且^也失败了。regex方言必须是Java的方言,但是我不确定它中的所有内容是否都能正常工作,因为我只是进行了粗略的检查。人们可能必须仔细查看
RegexpQuery
代码,以了解有效的方法和无效的方法。