Подтвердить что ты не робот

Какие функции регулярного выражения поддерживаются Solr edismax?

Регулярные выражения позволяют использовать синтаксис соответствия шаблонов, показанный ниже. Я пытаюсь реализовать мощный инструмент поиска, который реализует как можно больше из них. Мне говорят, что edismax - самый гибкий инструмент для работы. Какие из приведенных ниже шаблонов соответствия шаблонов можно выполнить с помощью edismax? Могу ли я сделать лучше, чем просветление? Можете ли вы предложить, какие фильтры и патчи для парсеров я могу использовать для достижения этой функции? Мне снится, если я думаю, что Solr может достичь приемлемой производительности (то есть времени обработки на стороне сервера) таких видов поиска?

синтаксис регулярных выражений и примеры из mysql

  • ^ соответствует началу строки. 'fofo' REGEXP '^fo' => true
  • $совпадение конца строки. 'fo\no' REGEXP '^fo\no$' => 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
4b9b3361

Ответ 1

Версия 4.0 Lucene будет поддерживать запросы regex непосредственно в стандартном синтаксисе запросов с использованием специального синтаксиса. Я проверил, что он работает на экземпляр Solr, который я запускаю, построенный из ствола subversion в феврале.

Jira ticket 2604 описывает расширение стандартного синтаксиса запросов с использованием специального синтаксиса регулярных выражений, используя прямую косую черту, чтобы разграничить регулярное выражение, аналогичное синтаксису в Javascript. Кажется, он использует базовый парсер ReggexpQuery.

Итак, краткий пример:

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

будет соответствовать пятизначному почтовому индексу в текстовом корпусе, который я проиндексировал. Но, как ни странно, тело:/\ d {5}/не работало для меня, а ^ не удалось.

Диалог регулярного выражения должен быть Java, но я не уверен, что все в нем работает, так как я только сделал беглый экзамен. Можно было бы, вероятно, внимательно изучить код RegexpQuery, чтобы понять, что работает, а что нет.

Ответ 2

Регулярные выражения и (e) утечки не очень сопоставимы. Dismax предназначен для работы непосредственно с общим входом конечного пользователя, в то время как регулярные выражения не являются типичным для пользователя.

Кроме того, сопоставление регулярных выражений с утилизацией во многом зависит от настроек текстового анализа и схемы, а не от самой разборки. С Solr вы обычно адаптируете схему и текстовый анализ к конкретным потребностям поиска, возможно, выполняя большую часть работы во время индекса. Регулярные выражения не согласуются с этим и даже с базовой структурой инвертированных индексов Lucene.

Тем не менее Lucene предоставляет RegexQuery и новый RegexpQuery. Насколько я знаю, они не интегрированы с Solr, но они могут быть. Начните новый элемент в Solr issue tracker и получите счастливое кодирование!:)

Имейте в виду, что запросы регулярных выражений, вероятно, всегда будут медленными... но они могут иметь приемлемую производительность в вашем случае.