Solr: заполнить отдельные поля от токенизатора
Вопрос
Я создал собственный токенизатор в Solr, который ищет именованные объекты. Я хотел бы иметь возможность использовать эту информацию для заполнения отдельных полей в документе lucene / solr.
В качестве примера я хочу заполнить многозначное поле с именем " местоположения " со всеми названиями мест, которые были извлечены из текста. Для извлечения местоположений текст сначала разбивается на токены, чтобы отделить слова и определить, какие жетоны являются местоположениями. После этого процесса я хотел бы выдать токены для токенизатора, а также заполнить поле «местоположения». со всеми названиями мест, которые были извлечены из текста.
Из проведенного мною исследования нет способа получить доступ к объекту SolrDocument из Tokenizer или TokenizerFactory, поэтому нет способа заполнять поля отсюда.
Решение, которое я до сих пор придумал, заключается в создании пользовательского UpdateRequestProcessorFactory, который обрабатывает текст и извлекает поля, а затем Tokenizer обрабатывает текст ОПЯТЬ, чтобы получить токены. Я хотел бы найти способ выполнить эту работу и обработать текст только один раз. Р>
Решение
То, как я это делаю, выглядит менее изящно, чем то, на что, похоже, вы стреляете:
Я предварительно обработал документы, используя именованный распознаватель сущностей, и сохранил все сущности в отдельном файле. Затем, когда я публикую в Solr, я просто читаю сущности из этого файла и заполняю поля сущностей (разные для людей, мест и организаций). Это можно упростить, но, поскольку я уже выполнил анализ для другой работы, было проще просто повторно использовать то, что уже существовало.
Другие советы
Вот идея, я думаю, сработает в lucene, но я понятия не имею, возможно ли это в solr. Вы можете маркировать строку вне типичной цепочки токенов, как вы предлагаете, а затем вручную добавить токены в документ, используя NOT_ANALYZED . Вы должны добавить каждый токен отдельно с document.add (...), который lucene будет рассматривать как одно поле для поиска.