Спасибо О. Кляйну, который показал мне новое направление.
Я наконец согласен с WhitespaceTokenizerFactory плюс WordDelimiterFilterFactory -
<fieldType name="ngram" class="solr.TextField" positionIncrementGap="100" stored="false" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
, который работает для "g74sx", "g74sx-", "g74sx-a" и "g74sx-a1"
Однако, путешествие здесь не закончилось, так как я все еще исследую, почему -
"G74SX-XA1"найдено с "g74sx-x" и "g74sx-xa1", но не с "g74sx-xa" ...