Как вы уже упоминали, у одного поля есть фильтр стволов, а у другого поля нет основ.
Чтобы ответить на ваш вопрос, это правильное поведение, и с ним все в порядке.На следующем примере мы увидим, почему это происходит, используя анализ solr.
Для поля с именем text будет использоваться тип поля ниже, который не имеет фабрики фильтра стволов.
<field name="text" type="text_general"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Когда вы проанализируете данные для вышеуказанного текстового поля на странице анализа Solr, вы обнаружите, что оно не соответствует данным.
Это не соответствует, потому что индексированные данные(токены, созданные в конце фабрики фильтров) отличается от значения запроса.
Для поля с именем text_copy_stemmed будет использоваться тип поля ниже, который имеет фабрику фильтра стволов.При индексации мы использовали <filter class="solr.KStemFilterFactory"/>
.
<field name="text_copy_stemmed" type="text_general_stemmed"/>
<copyField source="text" dest="text_copy_stemmed" indexed="true" stored="true"/>
<fieldType name="text_general_stemmed" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Когда вы проанализируете данные для указанного выше поля text_copy_stemmed на странице анализа solr, вы обнаружите, что оно действительно соответствует данным.
Запрашиваемые данные сопоставляются, поскольку они находят токен в solr.Проверьте токены, созданные в конце фабрики фильтров, и те, которые прошли через запрос.
Я проиндексировал приведенный ниже JSON и запросил те же данные с выделением.
{
"id":"gb18030-example.xml",
"text":"jump jumping jumped organizational organizations",
"text_copy_stemmed":"jump jumping jumped organizational organizations"
}