Фабрика токенизаторов шаблонов не работает должным образом

#solr #lucene #schema

#solr #lucene #схема

Вопрос:

Я пытаюсь проанализировать строку ввода с помощью PatternTokenizerFactory.

Итак, согласно документу: https://lucene .apache.org/core/4_1_0/analyzers-common/org/apache/lucene/analysis/pattern/PatternTokenizerFactory.html

Моя схема выглядит так:

     <fieldType name="text_ptn" class="solr.TextField" positionIncrementGap="100">
     <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="(amp;quot;bbbamp;quot;: amp;quot;)([[a-zA-Z ] )" group="2"/>
     </analyzer>
    </fieldType>
 

Итак, этот шаблон должен работать: https://regex101.com/r/9Ep6qO/6

В соответствии со схемой я пытаюсь получить значение из определенной части поля «test» (‘bbb’). Как я понимаю, теперь я могу искать документ, просто написав в Solr «test»:»Acc Hs», но я могу искать только с использованием такой конструкции: «test»:»‘bbb’: ‘Acc Hs'»

Мое решение состояло в том, чтобы разделить этот ввод, а затем использовать фильтр:

     <tokenizer class="solr.PatternTokenizerFactory" pattern="(.*amp;quot;bbbamp;quot;: amp;quot;)" />

    <filter class="solr.PatternCaptureGroupFilterFactory" 
           pattern="(^[a-zA-Z ] )"
           preserve_original="false"/>
 

Итак, не могли бы вы объяснить, почему первый вариант не работает.(Не было никакой разницы, когда я ставил, например, group =»1″)

Комментарии:

1. Это должно сработать, если вы экранируете кавычки в первом шаблоне, как во втором.

2. Также помните, что токенизатор применяется как для ввода, так и для вывода (поиск и индексация), если вы не скажете иначе. Это может потребовать, чтобы ваш запрос также соответствовал ожидаемому шаблону. Используйте страницу анализа под управлением администратора Solr, чтобы протестировать как ваш запрос, так и индексированный контент и посмотреть, как обрабатываются значения на каждом этапе анализа.

3. @ericLavault хорошо, как я уже сказал, я попытался запустить тот же пример, что и в документации: lucene. apache.org/core/4_1_0/analyzers-common/org/apache/lucene/… Таким образом, он выполняет поиск, как в моем примере, только по ‘bbb’

4. @MatsLindh Спасибо за совет. Когда я пытаюсь использовать анализ в примере в документации, он просто не дает информации о значении «bbb», но дает информацию о «bbb», где текст просто bbb. Но, как я уже упоминал, я не могу выполнить поиск, просто набрав «bbb»

5. Что, по-видимому, указывает на то, что проблема заключается в том, что сопоставление шаблона не выполняется при запросе. Вы можете использовать <analyzer type="index"> и <analyzer type="query"> иметь отдельные цепочки для индексации и запросов. Смотрите Этапы анализа здесь: cwiki.apache.org/confluence/display/solr/Analyzers — Я добавлю правильный ответ, если это действительно так.