query near examples array and solr spell-checking lang cyrillic

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:

  1. 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 carpeta example/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" />

  2. Divida los analizadores de campo spell_text en dos listas separadas para indexar y consultar.

  3. 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 :

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