У меня странная проблема с предложениями проверки орфографии Solr.
Я ищу такой термин (например, номер продукта): 08p17a6
С этим термином я нахожудокументы в моем индексе.
Я включил проверку орфографии = true.Таким образом, помимо документов, solr также дает мне предложение проверки орфографии в ответе xml:
<lst name="spellcheck">
<lst name="suggestions">
<lst name="p17a6">
<int name="numFound">1</int>
<int name="startOffset">2</int>
<int name="endOffset">7</int>
<arr name="suggestion">
<str>08p17a6</str>
</arr>
</lst>
</lst>
</lst>
Solr берет число от первого до моего поискового термина и дает мне предложение, основанное на "p17a6".Я не понимаю, почему он сокращает первые два числа для своего предложения.
Вещи станут более странными, если я включу spellcheck.collate:
<lst name="spellcheck">
<lst name="suggestions">
<lst name="p17a6">
<int name="numFound">1</int>
<int name="startOffset">2</int>
<int name="endOffset">7</int>
<arr name="suggestion">
<str>08p17a6</str>
</arr>
</lst>
<str name="collation">0808p17a6</str>
</lst>
</lst>
Мне нужно использовать проверку орфографии.collate для предложений по нескольким условиям поиска.Но, как вы видите, в ответе xml предлагается использовать «0808p17a6».
Кто-нибудь знает, как это происходит?
Редактировать:
Вот мойКонфигурация схемы относительно проверки орфографии:
<field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true" />
<copyField source="title" dest="spell" />
<copyField source="subTitle" dest="spell" />
<copyField source="content" dest="spell" />
Исходные поля полей копирования настраиваются следующим образом:
<field name="title" type="text" indexed="true" stored="true" termVectors="true" omitNorms="true" />
<field name="subTitle" type="text" indexed="true" stored="true" termVectors="true" omitNorms="true" />
<field name="content" type="text" indexed="true" stored="true" termVectors="true" />
Этоконфигурация для анализаторов:
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"
/>
<!-- best practice (currently) for synonyms is to add them by
expansions during index time
-->
<filter class="solr.SynonymFilterFactory" synonyms="german/synonyms.txt" ignoreCase="true" expand="true"/>
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory" words="german/stopwords.txt" ignoreCase="true" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" protected="german/protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"
/>
<filter class="solr.StopFilterFactory" words="german/stopwords.txt" ignoreCase="true" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" protected="german/protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
<!-- Setup simple analysis for spell checking -->
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="german/synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" words="german/stopwords.txt" ignoreCase="true"/>
<filter class="solr.StandardFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" words="german/stopwords.txt" ignoreCase="true"/>
<filter class="solr.StandardFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>