near - Corrección ortográfica rusa de Solr
solr near (1)
Se puede lograr con ICUTransformFilterFactory , que (un) transliterará la consulta de entrada cada vez.
Aquí hay un ejemplo de cómo se puede habilitar esta funcionalidad:
Habilita icu4j amalyzers ( lucene -analyzers-icu - *. Jar, icu4j - *. Jar):
Esas bibliotecas se pueden encontrar en la carpeta
contrib/analysis-extras
de la distribución de solr desde el sitio oficial (también están disponibles a través de maven).En solrconfig.xml, agregue algo como esto para habilitarlos (puede haber un único directorio de lib con todos los
example/solr/collection1/conf
que necesite, en este ejemplo solo usa la ubicación predeterminada relativa a la carpetaexample/solr/collection1/conf
de la distribución oficial):<lib dir="../../../contrib/analysis-extras/lib" regex=".*/.jar" /> <lib dir="../../../contrib/analysis-extras/lucene-libs" regex=".*/.jar" />
Divida los analizadores de campo spell_text en dos listas separadas para indexar y consultar.
Agregue solr.ICUTransformFilterFactory como analizador de consultas con la siguiente id
Any-Cyrillic; NFD; [^/p{Alnum}] Remove
Any-Cyrillic; NFD; [^/p{Alnum}] Remove
Any-Cyrillic; NFD; [^/p{Alnum}] Remove
:<fieldType name="spell_text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[,.;:]" replacement=" "/> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.PatternReplaceFilterFactory" pattern="''s" replacement=""/> <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/> <filter class="solr.LengthFilterFactory" min="3" max="256" /> </analyzer> <analyzer type="query"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[,.;:]" replacement=" "/> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.PatternReplaceFilterFactory" pattern="''s" replacement=""/> <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/> <filter class="solr.LengthFilterFactory" min="3" max="256" /> <filter class="solr.ICUTransformFilterFactory" id="Any-Cyrillic; NFD; [^/p{Alnum}] Remove" /> </analyzer> </fieldType>
En cuanto a la id de ICUTransformFilterFactory - Any-Cyrillic; NFD; [^/p{Alnum}] Remove
Any-Cyrillic; NFD; [^/p{Alnum}] Remove
Any-Cyrillic; NFD; [^/p{Alnum}] Remove
:
- Pregunta relacionada con stackoverflow
- Guía oficial
La configuración descrita anteriormente está funcionando en mi máquina local de la misma manera para transliteraciones rusas y palabras rusas
Estoy usando la corrección ortográfica de solr para el idioma ruso. Cuando está escribiendo con caracteres cirílicos, todo está bien, pero no funciona cuando está escribiendo caracteres latinos.
Quiero que la corrección ortográfica sea correcta y cuando esté escribiendo con caracteres cirílicos y cuándo está escribiendo con caracteres latinos . Y corrija el texto con caracteres cirílicos .
For example, when you type:
телевидениеее or televidenieee
It should correct to:
телевидение
schema.xml:
<fieldType name="spell_text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[,.;:]" replacement=" "/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="''s" replacement=""/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true"/>
<filter class="solr.LengthFilterFactory" min="3" max="256" />
</analyzer>
</fieldType>
solrconfig.xml
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">spellcheck</str>
<str name="classname">solr.IndexBasedSpellChecker</str>
<str name="buildOnCommit">true</str>
<str name="buildOnOptimize">true</str>
<str name="spellcheckIndexDir">./spellchecker</str>
<str name="accuracy">0.75</str>
</lst>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="field">spellcheck</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="combineWords">false</str>
<str name="breakWords">true</str>
<int name="maxChanges">1</int>
</lst>
</searchComponent>
Gracias por la ayuda