Это наиболее вероятно, потому что у вас тип поля типа ваших динамических полей установлен на string
. По умолчанию тип строкового поля, как показано ниже, не слишком удобен для поиска, так как с ним не связан ни один индекс или анализатор времени запроса.
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
Я бы посоветовал вам изменить тип поля на text_general
, как показано ниже.
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Поскольку text_general лучше подходит для запросов к полю, так как он токенизирует, строчные буквы и предоставляет синонимы для значений, добавленных к нему. Одним из быстрых способов получить те же преимущества без изменения типа вашего поля для динамики было бы использование copyField для копирования ваших динамических значений в тип поля text_general
или другой тип поля, который лучше было бы запрашивать. против.