Для I.B.M. => IBM
вам понадобится solr. WordDelimiterFilterFactory , который удалит специальные символы и введет слово и цифры
catenateWords = "1" объединит слова и преобразует I.B.M в IBM.
расчленение => расчленить
Необходимо включить фильтр стволов (например, solr.PorterStemFilterFactory, solr.EnglishMinimalStemFilterFactory), который будет индексировать корни слов и обеспечивать совпадения для слов, имеющих одинаковые корни.
Кроме того, вы можете использовать solr.LowerCaseFilterFactory для нечувствительных к регистру совпадений (IBM и ibm), solr.ASCIIFoldingFilterFactory для обработки иностранных символов.
Вы всегда можете использовать SynonymFilterFactory для отображения слов, которые, по вашему мнению, являются синонимами.
Вы можете применить это как во время запроса, так и во время индексации, чтобы они совпадали и конвертировались во время обоих, и результаты были согласованы.
например. тип поля def -
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<!-- Index and Query time -->
<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"/>
<!-- Stemmer -->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters