На самом деле существует класс фильтра с именем solr.SynonymFilterFactory .
Это должно позволить вам сопоставить номера кошек с двумя текстовыми эквивалентами, если вы используете их только в анализаторе запросов, что-то вроде следующего:
<fieldType name="category" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="category_Synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Таким образом, вы можете индексировать ТОЛЬКО идентификатор категории. Это означает, что вам не нужно будет снова отправлять все предприятия в Solr. Также, если кто-то запрашивает"программное обеспечение" или "ИТ", он сопоставит его с категорией
Ваш category_Synonyms.txt должен содержать следующие строки:
1, программное обеспечение, IT
Единственный вывод, что вам придётся придумать способ редактирования текстового документа при изменении имен или синонимов. Так что я думаю, это поможет, только если вы редко меняете названия категорий ?? Если кто-то еще не знает, как это можно сделать легко.
Я фактически добавил вышеупомянутое в свой собственный solr и запустил инструмент Analyzer на нем .. вот результат:
Как вы можете видеть, оно превращено в
.
1
Обратите внимание, что вы ДОЛЖНЫ установить
расширение
параметр до
ложь
Надеюсь, это поможет.
Dave