#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 — Я добавлю правильный ответ, если это действительно так.