Какие функции регулярного выражения поддерживаются Solr edismax?
регулярных выражений позволяет шаблоны приведены ниже. Я пытаюсь реализовать мощный инструмент поиска, который реализует как можно больше из них. Мне сказали, что edismax-самый гибкий инструмент для работы. Какой из шаблонов выражений ниже может быть выполнено с edismax? Могу ли я сделать лучше, чем edismax? Можете ли вы предложить, какие фильтры и исправления синтаксического анализатора я мог бы использовать для достижения этой функциональности? Я сплю, если думаю, что Солр может? достичь приемлемой производительности (т. е. времени обработки на стороне сервера) этих видов поиска?
синтаксис и примеры регулярных выражений из в MySQL
- ^ соответствует началу строки.
'fofo' REGEXP '^fo' => true
- $ соответствует концу строки.
'fono' REGEXP '^fono$' => true
- * 0-неограниченное шаблонами.
'Baaaan' REGEXP 'Ba*n' => true
- ? 0-1 подстановки.
'Baan' REGEXP '^Ba?n => false'
- + 1-неограниченное шаблонами.
'Bn' REGEXP 'Ba+n' => false
- | или.
'pi' REGEXP 'pi|apa' => true
- ()* матч последовательности.
'pipi' REGEXP '^(pi)*$' => true
- [a-dX], [^a-dX] диапазон символов/набор
'aXbc' REGEXP '[a-dXYZ]' => true
- {n} или {m,n} обозначение мощности
'abcde' REGEXP 'a[bcd]{3}e' => true
- [: character_class:]
'justalnums' REGEXP '[[:alnum:]]+' => true
2 ответов
версия 4.0 Lucene будет поддерживать запросы regex непосредственно в стандартном синтаксическом анализаторе запросов с использованием специального синтаксиса. Я проверил, что он работает на экземпляре Solr, который я запускаю, построенный из магистрали subversion в феврале.
Jira билет 2604 описывает расширение стандартного синтаксического анализатора запросов с использованием специального синтаксиса регулярных выражений, используя косые черты для разграничения регулярных выражений, подобно синтаксису в Javascript. Вроде бы через парсер RegexpQuery.
Итак, краткий пример:
body:/[0-9]{5}/
будет соответствовать пятизначному почтовому индексу в текстовом корпусе, который я проиндексировал. Но, как ни странно, body:/\d{5} / не работал для меня, и ^ также не удалось.
диалект регулярных выражений должен быть Java, но я не уверен, что все в нем работает, так как я только бегло осмотрел. Вероятно, придется внимательно посмотреть на код RegexpQuery, чтобы понять, что работает, а что нет.
регулярные выражения и (e)dismax на самом деле не сопоставимы. Dismax предназначен для работы непосредственно с общими входными данными конечного пользователя, в то время как регулярные выражения не являются типичными входными данными конечного пользователя.
кроме того, сопоставление регулярных выражений с dismax во многом зависит от параметры анализа текста и дизайн схемы, а не сам dismax. С Solr вы обычно адаптируете схему и анализ текста к конкретной потребности в поиске, возможно, выполняя большую часть работы индекс-время. Регулярные выражения противоречат этому и даже базовой структуре перевернутых индексов Люсена.
тем не менее, Lucene обеспечивает RegexQuery и новая RegexpQuery. Насколько я знаю, они не интегрированы с Solr, но они могут быть. Запустите новый элемент в Solr issue tracker и удачи в кодировании! :)
имейте в виду, что запросы регулярных выражений, вероятно, всегда будут медленными... но они могли бы быть приемлемыми. производительность в вашем случае.