Допустим, у меня тип поля следующий:
<fieldType name="text_body" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" catenateWords="1" preserveOriginal="1"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Моя цель - индексировать для каждого токена исходный токен, а также токен после прохождения всех фильтров токена. Например, для текста:
"My dog is barking #DOGS"
Текущий тип поля (как упомянуто выше) будет индексировать следующие токены:
"my", "dog", "bark", "dogs", "#dogs"
"is" будет удалено из-за stopWords фильтр, и «лай» станет «корой» из-за фильтра stemming.
Мне бы хотелось, чтобы были проиндексированы следующие токены:
"My", "my", "dog", "barking", "bark", "dogs", "#DOGS".
Я рассмотрел параметр "perserveOriginal" в WordDelimiterGraphFilterFactory, но он работает только для токенов со специальными символами, и после этого «оригинальный токен» пропускает другие фильтры.
Я знаю, что очевидным способом является написание собственного TokenFilter, который индексирует токены в их первоначальная форма сразу после токенизатора, но мой вопрос в том, есть ли что-то встроенное в Solr, которое позволяет это.
Я использую Solr 6.5.1
Спасибо:)