Я просмотрел массу примеров и других вопросов здесь и из них, у меня есть моя конфигурация, очень близкая к тому, что мне нужно, но я пропускаю один последний бит, который у меня есть время разработки. Я ищу такие значения, как:
solar powered
solar glass
solar globe
solar lights
solar magic
solid brass
solid copper
Что я хочу:
- Если я ищу
sol
, результат должен включать все эти значения. Это работает. - Если я ищу
solar
, я должен получить только первые пять. Это работает. - Если я ищу
solar gl
, я должен получить толькоsolar glass
иsolar globe
. Это не работает. Вместо этого я получаю один набор совпадений дляsolar
и второй набор совпадений дляgl
.
Вкратце, я хочу рассмотреть входную строку в целом независимо от любого пробела. Я понимаю, что это достигается путем создания отдельного анализатора запросов (по сравнению с индексом), но я не смог заставить его работать. Может ли кто-нибудь предложить конфигурацию, которая получит меня, что я ищу?
Я (безуспешно) пытался:
- Запрос с помощью
"solar gl"
- Запрос с помощью
mm=100%
- Определение отдельных анализаторов запросов и индексов с использованием KeywordTokenizerFactory. (Не знаю, что, черт возьми, я подумал, что будет.)
- Определение анализатора индексов, но не анализатора запросов.
- Определение анализатора запросов без токенизатора.
Здесь моя текущая схема:
<field name="suggest_phrase" type="suggest_phrase"
indexed="true" stored="false" multiValued="false" />
И определение поля:
<fieldType name="suggest_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
И config:
<searchComponent name="suggest_phrase" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">suggest_phrase</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str>
<str name="field">suggest_phrase</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest_phrase">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest_phrase</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">false</str>
</lst>
<arr name="components">
<str>suggest_phrase</str>
</arr>
</requestHandler>