Я искал переполнение стека по этому вопросу, но ни один из них не адресован конкретному шаблону буква-дефис-номер, который, как представляется, является специфическим случаем, с которым у Solr возникли проблемы.
У нас есть продукты с короткими дефис-буквенно-цифровыми словами, которые нуждаются вбыть проиндексированным в Solr и быть доступным для поиска. Например, продукт под названием «aimpoint t-2». Пользователь должен иметь возможность запросить «t-2» или «aimpoint t-2», чтобы получить результат.
Я перепробовал все возможные комбинации токенизатора и фильтра и не могу этого сделать, надеюсь, я упустил что-то простое.
Соответствующий раздел schema.xml (Solr 6.5):
<field name="product_name" type="text_en" indexed="true" stored="true" multiValued="false" />
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
<filter class="solr.FlattenGraphFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
</analyzer>
</fieldType>
Заранее спасибо
ОБНОВЛЕНИЕ 1:
За ответ MatsLindh У меня есть ответследующий обновленный schema.xml
<fieldType name="text_en" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
Вот вывод вкладки анализа:
А вот данные запроса отладки:
https://gist.githubusercontent.com/jordotech/d73fecfe6e6c0ee8c2177ea2bd9d5ff2/raw/6969686eef7a43f2072849138a7178b41692e6a8/query_debug.json
Может ли это быть как-то связано с этой частью отладочного json?
"parsedquery":"+(+SynonymQuery(Synonym(text:t text:t2)) +text:2)",
"parsedquery_toString":"+(+Synonym(text:t text:t2) +text:2)",
Кажется, что он удаляет дефис