此正则表达式不仅适用于Solr

时间:2017-11-03 05:19:49

标签: regex solr solrnet

This Regex在普通的C#控制台应用程序中运行良好。基于此,我们已开始使用SolrNet。尝试使用相同的正则表达式查询字段的Solr实例,抛出异常,如下所示

java.lang.IllegalArgumentException: expected ']' at position 70 at org.apache.lucene.util.automaton.RegExp.parseCharClassExp(RegExp.java:1087)

2 个答案:

答案 0 :(得分:0)

您正在使用与.NET正则表达式引擎不同的Lucene正则表达式引擎。

连字符是一个范围运算符,当它在Lucene模式中的字符类的末尾时未被转义。因此,要么逃避连字符,要么移到字符类开头,即[a-zA-Z'-] => [-a-zA-Z'][^a-zA-Z'-] => [^-a-zA-Z']

看起来Lucene正则表达式不支持非捕获组,因此从模式中删除所有?:

所以,它看起来像

([-a-zA-Z']+[^-a-zA-Z']+){0,5}the([^-a-zA-Z']+[-a-zA-Z']+){0,5}([-a-zA-Z']+[^-a-zA-Z']+){0,5}the([^-a-zA-Z']+[-a-zA-Z']+){0,5}

答案 1 :(得分:0)

根据您的评论,您的用例似乎最适合使用短语查询,您是否尝试过?

像"网站stackoverflow.com这样的查询是" ~5可以工作,并且性能更高。如果订单很重要,您可以使用两个查询("网站stackoverflow" ~5 AND" stackoverflow.com是" ~5)并使用自定义记分器删除那些不合适的。它会更高效。