Хобрук: Ваш путь к мастерству в программировании

Любые предложения по улучшению производительности поиска solr regex?

В Solr у меня есть следующее поле для выполнения точного поиска регулярных выражений фразы в текстовых полях (каждое> 1 КБ):

<fieldType name="text_keyword_lowercase" class="solr.TextField" positionIncrementGap="100">
 <analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>
  • Как и ожидалось, регулярные выражения ищут начало текста очень быстро (/sear.* ph.ase.*/);
  • Другие, середина и конец (/.*sear.* ph.ase.*/, /.*sear.* ph.ase/) работают медленно (поиск среди 200 000 документов в solr занимает около 900 мс на моей рабочей станции);

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

15.04.2013

  • Какова цель .* в вашем регулярном выражении? 16.04.2013
  • @MikeM Извините, в сообщении была ошибка форматирования. .* указывает, что может быть ноль или более символов. 16.04.2013
  • Да, мне просто интересно, для какой цели они служат, если вы выполняете поиск по регулярным выражениям с точными фразами. 16.04.2013
  • @MikeM Думаю, эта фраза не совсем понятна. Под поиском точных фраз по регулярным выражениям я подразумеваю, что мне нужно выполнять поиск по фразам с регулярными выражениями, а результаты поиска должны возвращать только точные совпадения. Вот почему я использую KeywordTokenizerFactory для токенизации текста как одного токена. 16.04.2013
  • .* слишком либеральны и жадны, и их следует по возможности избегать, так как они снижают производительность (.*? обычно лучше, поскольку обычно приводит к меньшему количеству возвратов). Если вы отредактировали свой вопрос и точно описали цель каждого регулярного выражения, кто-то может помочь вам лучше. 16.04.2013

Ответы:


1

Вы можете взглянуть на solr.EdgeNGramFilterFactory. Ваш индекс будет расти, но скорость улучшится.

16.04.2013
  • Это должно быть намного быстрее, чем запросы с подстановочными знаками. В противном случае вы можете ускорить подстановочные знаки в начале с помощью wiki.apache.org/solr/ 16.04.2013
  • Новые материалы

    Как я могу подписаться на тему изображений в ROS Matlab и получить изображение RGB?
    Привет, Пожалуйста, как я могу извлечь изображение из сообщения ROS Image, за которым следует imshow? Я уже подписался на правильную тему, но message.getData() дает мне объект..

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

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

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..