Solr: заполнить отдельные поля от токенизатора

StackOverflow https://stackoverflow.com/questions/1015576

  •  06-07-2019
  •  | 
  •  

Вопрос

Я создал собственный токенизатор в Solr, который ищет именованные объекты. Я хотел бы иметь возможность использовать эту информацию для заполнения отдельных полей в документе lucene / solr.

В качестве примера я хочу заполнить многозначное поле с именем " местоположения " со всеми названиями мест, которые были извлечены из текста. Для извлечения местоположений текст сначала разбивается на токены, чтобы отделить слова и определить, какие жетоны являются местоположениями. После этого процесса я хотел бы выдать токены для токенизатора, а также заполнить поле «местоположения». со всеми названиями мест, которые были извлечены из текста.

Из проведенного мною исследования нет способа получить доступ к объекту SolrDocument из Tokenizer или TokenizerFactory, поэтому нет способа заполнять поля отсюда.

Решение, которое я до сих пор придумал, заключается в создании пользовательского UpdateRequestProcessorFactory, который обрабатывает текст и извлекает поля, а затем Tokenizer обрабатывает текст ОПЯТЬ, чтобы получить токены. Я хотел бы найти способ выполнить эту работу и обработать текст только один раз.

Это было полезно?

Решение

То, как я это делаю, выглядит менее изящно, чем то, на что, похоже, вы стреляете:

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

Другие советы

Вот идея, я думаю, сработает в lucene, но я понятия не имею, возможно ли это в solr. Вы можете маркировать строку вне типичной цепочки токенов, как вы предлагаете, а затем вручную добавить токены в документ, используя NOT_ANALYZED . Вы должны добавить каждый токен отдельно с document.add (...), который lucene будет рассматривать как одно поле для поиска.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top