This Regex在普通的C#控制台应用程序中运行良好。基于此,我们已开始使用SolrNet。尝试使用相同的正则表达式查询字段的Solr实例,抛出异常,如下所示
java.lang.IllegalArgumentException: expected ']' at position 70 at org.apache.lucene.util.automaton.RegExp.parseCharClassExp(RegExp.java:1087)
答案 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)并使用自定义记分器删除那些不合适的。它会更高效。