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



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

正则表达式语法&mysql中的示例

  1. ^匹配字符串的开头。'fofo' REGEXP '^fo' => true
  2. $match字符串结尾。'fono' REGEXP '^fono$' => 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

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

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

举个简单的例子:

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

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

regex方言必须是Java的,但我不确定其中的所有内容是否都有效,因为我只做了粗略的检查。可能需要仔细查看RegexpQuery代码,才能了解哪些有效,哪些无效。

正则表达式和(e)dismax并不是真正可比较的。Dismax旨在直接处理常见的最终用户输入,而正则表达式不是典型的最终用户输出。

此外,将类似正则表达式的东西与dismax匹配在很大程度上取决于文本分析设置和模式设计,而不是dismax本身。使用Solr,您通常会根据具体的搜索需求定制模式和文本分析,可能会在索引时完成大部分工作。正则表达式与此不一致,甚至与Lucene反向索引的基本结构也不一致。

尽管如此,Lucene还是提供了RegexQuery和更新的RegexpQuery。据我所知,这些没有与Solr集成,但它们可能是。在Solr问题跟踪器中启动一个新项目并愉快地编码!:)

请记住,regex查询可能总是很慢。。。但在您的情况下,它们可能具有可接受的性能。

相关内容

  • 没有找到相关文章

最新更新