Solr edismax支持哪些正则表达式功能?

时间:2012-02-17 16:57:03

标签: regex solr edismax

正则表达式允许使用下面显示的模式匹配语法。 我正在尝试实现一个功能强大的搜索工具,尽可能多地实现这些工具。 我被告知edismax是这项工作最灵活的工具。 下面哪个模式匹配表达式可以用edismax完成?我能做得比edismax好吗?您能否建议我可以使用哪些过滤器和解析器补丁来实现此功能?如果我认为Solr能够达到这类搜索的可接受性能(即服务器端处理时间),我是否会梦想?

正则表达式语法& mysql

中的示例
  1. ^匹配字符串的开头。 'fofo' REGEXP '^fo' => true
  2. $匹配字符串的结尾。 'fo\no' REGEXP '^fo\no$' => true
  3. * 0-无限制的通配符。 'Baaaan' REGEXP 'Ba*n' => true
  4. ? 0-1通配符。 'Baan' REGEXP '^Ba?n => false'
  5. + 1 - 无限制的通配符。 'Bn' REGEXP 'Ba+n' => false
  6. |要么。 'pi' REGEXP 'pi|apa' => true
  7. ()*序列匹配。 'pipi' REGEXP '^(pi)*$' => true
  8. [a-dX],[^ a-dX]字符范围/设置'aXbc' REGEXP '[a-dXYZ]' => true
  9. {n}或{m,n}基数表示法'abcde' REGEXP 'a[bcd]{3}e' => true
  10. [:character_class:] 'justalnums' REGEXP '[[:alnum:]]+' => true

2 个答案:

答案 0 :(得分:15)

Lucene 4.0版将使用特殊语法直接在标准查询解析器中支持正则表达式查询。我验证它适用于我正在运行的Solr实例,它是在二月份的subversion主干中构建的。

Jira ticket 2604使用特殊的正则表达式语法描述标准查询解析器的扩展,使用正斜杠来划分正则表达式,类似于Javascript中的语法。它似乎使用底层的RegexpQuery解析器。

这是一个简短的例子:

body:/[0-9]{5}/

将匹配我编入索引的文本语料库中的五位邮政编码。但是,奇怪的是,身体:/ \ d {5} /对我不起作用,^也失败了。

正则表达式方言必须是Java的,但我不确定它是否有效,因为我只是粗略地检查了一下。人们可能不得不仔细查看RegexpQuery代码,以了解哪些有效,哪些无效。

答案 1 :(得分:4)

正则表达式和(e)dismax实际上不具有可比性。 Dismax意味着直接与常见的最终用户输入一起工作,而正则表达式不是典型的最终用户输入。

此外,将类似正则表达式的事物与dismax匹配在很大程度上取决于text analysis settings和架构设计,而不是dismax本身。使用Solr,您通常可以根据具体的搜索需求定制模式和文本分析,从而可能在索引时完成大部分工作。正则表达式与此不一致,甚至与Lucene倒排索引的基本结构相符。

然而,Lucene提供了RegexQuery和更新的RegexpQuery。据我所知,这些并没有与Solr集成,但它们可能是。在Solr issue tracker中开始一个新项目并快乐编码! :)

请记住,正则表达式查询可能总是很慢......但在您的情况下,它们可以具有可接受的性能。

相关问题