Configuración
Breadcrumbs

Configuración del buscador

En Anjana Data Platform, el buscador es un componente clave para la explotación eficiente de los metadatos y la gestión de activos de datos. Su configuración debe estar diseñada para maximizar la relevancia de los resultados, teniendo en cuenta los subtipos de objetos y los atributos de metadatos más significativos para el negocio.

Esta guía explica cómo modificar el comportamiento del motor de búsqueda de Anjana Data Platform mediante la configuración de SOLR. Esto permite ajustar la relevancia de los subtipos de objetos y sus metadatos, aplicar filtros de palabras vacías y definir tipos de campos de búsqueda personalizados para optimizar los resultados de búsqueda.

Prerrequisitos

  • Acceso a la API de configuración del core de SOLR (kerno) en su entorno Anjana Data.

  • Conocimiento básico de comandos curl y formato JSON.

  • Los comandos asumen que se está utilizando la colección kerno.

  • Para comandos curl se utiliza la opción -k para conexiones inseguras (ignorar certificado SSL), lo cual puede ser necesario en entornos de prueba o con certificados autofirmados.

A continuación se detalla el procedimiento completo de configuración de las ponderaciones, el cual se recomienda ejecutar de principio a fin.

En caso de reutilizar los comandos que se incluyen en esta guía, se debe sustituir el <url_entorno> por el valor correspondiente.

En caso de que, tras realizar todos los pasos el portal no se cargue correctamente, se recomienda eliminar las configuraciones del buscador.

1. Configuración del Handler de Búsqueda Principal (/select)

En este paso se define cómo se ordenan y priorizan los resultados de búsqueda en Anjana Data Platform.
A través de la configuración del handler /select se establece:

  • Qué tipos de activos deben aparecer primero.

  • Qué atributos del activo pesan más a la hora de calcular la relevancia.

De esta forma, el buscador se adapta al uso real del negocio, priorizando los activos que aportan más valor al usuario final.

Comando de ejemplo

En el siguiente ejemplo se definen las prioridades de los resultados según:

  • Subtipo de objeto (OBJ_SUB_TYPE)

    • DATASET_FIELD: se penaliza con un peso de -10 para que los campos de dataset aparezcan al final de los resultados.

    • DATASET: peso 18

    • DSA: peso 17

    • PROCESS: peso 16

    • INSTANCE: peso 15

    • SOLUTION: peso 14

    Esto hace que, por ejemplo, un dataset completo aparezca antes que sus campos individuales cuando el usuario realiza una búsqueda.

  • Atributos de metadatos clave

    • OBJ_NAME: se le asigna un peso 25, lo que significa que el nombre lógico del activo es uno de los factores más importantes para decidir qué resultado se muestra antes.

curl -k -X POST --header 'Content-type: application/json' -d '{
  "update-requesthandler": {
    "name": "/select",
    "class": "solr.SearchHandler",
    "defaults": {
      "echoParams": "explicit",
      "rows": "10",
      "defType": "edismax",
      "qf": "OBJ_SUB_TYPE^25 OBJ_NAME^25 _text_^0.5",
      "bf": "if(termfreq(OBJ_SUB_TYPE,\"DATASET_FIELD\"),-10,if(termfreq(OBJ_SUB_TYPE,\"DATASET\"),18,if(termfreq(OBJ_SUB_TYPE,\"DSA\"),17,if(termfreq(OBJ_SUB_TYPE,\"PROCESS\"),16,if(termfreq(OBJ_SUB_TYPE,\"INSTANCE\"),15,if(termfreq(OBJ_SUB_TYPE,\"SOLUTION\"),14,1))))))"
    }
  }
}' https://solr1server.<url_entorno>:8983/solr/kerno/config

Explicación a Alto Nivel:

Con este comando se actualiza la configuración del buscador para:

  • Priorizar la información más relevante para el negocio
    Se indica que determinados tipos de activos (por ejemplo, DATASET o DSA) deben aparecer por encima de otros (como DATASET_FIELD). Esto ayuda a que el usuario vea primero los activos más significativos y no se pierda en resultados demasiado detallados.

  • Dar más peso a los campos clave en la búsqueda
    Se refuerza especialmente el subtipo de objeto (OBJ_SUB_TYPE) y el nombre lógico del activo (OBJ_NAME), de forma que:

    • Si el término de búsqueda aparece en el nombre del activo, ese resultado sube posiciones.

    • Si el término se relaciona con un tipo de activo que el negocio considera más relevante (por ejemplo, un DATASET frente a un campo), también se ve reflejado en el orden de los resultados.

En resumen, este paso permite al cliente alinear el ranking de los resultados del buscador con sus prioridades de negocio, sin necesidad de cambiar la lógica funcional de la plataforma.

2. Configuración de Listas de Palabras Vacías (Stopwords)

Las stopwords son palabras comunes que se excluyen de la búsqueda porque no aportan valor para identificar un activo.
Son términos que aparecen con mucha frecuencia en el lenguaje natural pero que, por sí mismos, no ayudan a diferenciar ni localizar información relevante.

Ejemplos típicos serían:

  • En español: de, la, los, un, para, con, sobre, este, esa…

  • En inglés: the, a, at, on, of, by, this…

Si estas palabras se mantuvieran dentro del análisis de búsqueda:

  • Sobresaldrían frente a términos realmente relevantes.

  • Reducirían la precisión de los resultados.

  • Harían el buscador más lento o menos eficiente.

Por ello, Solr permite definir listas de stopwords que filtran estas palabras antes del proceso de indexación y consulta, evitando que influencien la relevancia de los resultados.

2.1. Creación de los recursos de Stopwords

Estos comandos crean los recursos gestionados de stopwords para español e inglés en el esquema de SOLR.

Comandos de Ejemplo (Creación):

curl -k -X PUT -H 'Content-type:application/json' --data-binary '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' "https://solr1server.<url_entorno>:8983/solr/kerno/schema/analysis/stopwords/spanish"
curl -k -X PUT -H 'Content-type:application/json' --data-binary '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' "https://solr1server.<url_entorno>:8983/solr/kerno/schema/analysis/stopwords/english"

Explicación a Alto Nivel:

Se crean dos recursos de conjunto de palabras gestionadas (ManagedWordSetResource) en el esquema de SOLR, uno llamado spanish y otro english. Esto permite gestionar las listas de stopwords a través de la API en lugar de archivos estáticos.

2.2. Inserción de Palabras Vacías en Español e Inglés

Este comando inserta la lista de palabras vacías específicas para el idioma español.

Comando de Ejemplo (Español):

curl -k -X PUT -H 'Content-type:application/json' --data-binary '["últimos","último","últimas","última","éstos","éste","éstas","ésta","éramos","él","yo","ya","y","vuestros","vuestro","vuestras","vuestra","voy","vosotros","vosotras","vez","VERDADERO","verdadera","verdad","ver","veces","vaya","varios","varias","van","vamos","valor","vais","va","usted","uso","usas","usar","usan","usamos","usais","usa","unos","uno","unas","una","un","ultimo","tú","tuyos","tuyo","tuyas","tuya","tuvo","tuviésemos","tuviéramos","tuvisteis","tuviste","tuvimos","tuvieses","tuviesen","tuvieseis","tuviese","tuvieron","tuvieras","tuvieran","tuvierais","tuviera","tuve","tus","tu","tres","través","trata","tras","trabajo","trabajas","trabajar","trabajan","trabajamos","trabajais","trabaja","total","todos","todo","todavía","todas","toda","tienes","tienen","tiene","tiempo","ti","tercera","tenías","tenían","teníamos","teníais","tenía","tenéis","teniendo","tenidos","tenido","tenidas","tenida","tengáis","tengo","tengas","tengan","tengamos","tenga","tener","tenemos","teneis","tened","tendrías","tendrían","tendríamos","tendríais","tendría","tendréis","tendré","tendrás","tendrán","tendrá","tendremos","te","tanto","tan","tampoco","también","tal","sólo","sí","suyos","suyo","suyas","suya","sus","su","soy","son","somos","solos","solo","solas","solamente","sola","sois","sobre","sino","sin","siguiente","sigue","siete","ya","y","vez","ver","veces","varios","varias","usted","tuvo","tres","través","trata","total","todos","todavía","todas","toda","tercera","tenido","tenga","tendrán","tendrá","tenía","tanto","tan","tampoco","tal","son","solos","solas","sola","sino","siguiente","sigue","siete","siempre","sido","sería","serán","será","seis","segundo","segunda","según","sean","sea","señaló","se","sólo","sí","respecto","realizar","realizado","realizó","quiere","quienes","quién","queremos","quedó","que","qué","pues","pueda","pudo","propios","propio","propias","propia","principalmente","primeros","primera","primer","próximos","próximo","posible","poner","podrían","podría","podrán","podrá","pocos","poco","pocas","poca","pesar","pasado","pasada","partir","parte","parece","otros","otras","otra","ocho","o","nunca","nuevos","nuevo","nuevas","nueva","nuestros","nuestro","nuestras","nuestra","nosotras","no","ningunos","ninguno","ningunas","ninguna","ningún","ni","nadie","nada","mucho","muchas","mucha","momento","mismos","mismo","mismas","misma","mi","menos","mencionó","mejor","mediante","me","mayor","manifestó","manera","más","lugar","luego","llevar","lleva","llegó","les","le","lado","junto","informó","indicó","igual","hubo","hoy","hizo","hicieron","hemos","hecho","he","haya","hay","hasta","han","haciendo","hacia","hacerlo","habrá","haber","habían","había","grandes","gran","fuera","expresó","explicó","existen","existe","ex","estuvo","estos","esto","este","estas","estará","estar","estaban","están","está","esos","eso","ese","esas","esa","encuentra","embargo","ello","ella","ejemplo","e","durante","dio","dijo","dijeron","diferentes","diferente","dieron","dicho","dicen","dice","después","demás","del","dejó","decir","debido","deben","debe","de","dar","dan","dado","da","cuenta","cuatro","cuanto","cualquier","cuales","creo","cosas","contra","considera","consideró","conocer","comentó","cinco","cerca","casi","cómo","buenos","bueno","buenas","buena","buen","ayer","aunque","aseguró","así","aquí","aproximadamente","apenas","anterior","alrededor","algo","al","ahora","ahí","agregó","afirmó","además","adelante","actualmente","aún","añadió","a","últimos","último","últimas","última","éstos","éste","éstas","ésta","él","yo","voy","vosotros","vosotras","VERDADERO","verdadera","verdad","vaya","van","vamos","valor","vais","va","uso","usas","usar","usan","usamos","usais","usa","unos","uno","unas","una","un","ultimo","tuyo","tras","trabajo","trabajas","trabajar","trabajan","trabajamos","trabajais","trabaja","todo","tienen","tiene","tiempo","tengo","tener","tenemos","teneis","también","sus","su","soy","somos","solo","solamente","sois","sobre","sin","siendo","si","ser","sabes","saber","saben","sabemos","sabeis","sabe","quien","puedo","pueden","puede","primero","porque","por qué","por","podrias","podrian","podriamos","podriais","podria","poder","podemos","podeis","pero","para","otro","nosotros","nos","muy","muchos","modo","mio","mientras","los","lo","las","largo","la","ir","intento","intentas","intentar","intentan","intentamos","intentais","intenta","incluso","hago","haces","hacer","hacen","hacemos","haceis","hace","ha","gueno","fuimos","fui","fueron","fue","fin","estoy","estan","estamos","estais","estado","estaba","esta","es","eres","eras","eran","eramos","era","entre","entonces","encima","en","empleo","empleas","emplear","emplean","empleais","ellos","ellas","el","dos","donde","desde","dentro","cuando","cual","consigues","consiguen","consigue","consigo","conseguir","conseguimos","con","como","ciertos","cierto","ciertas","cierta","cada","bien","bastante","bajo","atras","arriba","aqui","aquellos","aquellas","aquel","antes","ante","ampleamos","ambos","algunos","alguno","algunas","alguna","algún","algo","al","ahí","ahora","agregó","afirmó","además","adelante","actualmente","a"]' "https://solr1server.<url_entorno>:8983/solr/kerno/schema/analysis/stopwords/spanish"

Comando de Ejemplo (Inglés):

curl -k -X PUT -H 'Content-type:application/json' --data-binary '["youre","youd","world","words","widely","whos","whod","whim","wheres","whats","wed","vols","vol","'\''ve","usefulness","usefully","ups","ts","tip","til","throug","thousand","thoughh","thou","theyre","theyd","thereto","therere","thereof","thered","suggest","sufficiently","successfully","substantially","strongly","stop","states","state","specifically","somethan","slightly","similarly","similar","significantly","significant","shows","showns","shown","showed","shes","shed","section","sec","run","results","resulting","resulted","research","related","refs","ref","readily","ran","quickly","proud","promptly","primarily","previously","present","predominantly","pp","potentially","possibly","poorly","pages","page","owing","ord","omitted","obtained","obtain","noted","nos","necessarily","nay","na","mug","ml","million","mg","means","'\''ll","line","lets","largely","km","kg","keys","itd","invention","information","index","important","importance","immediately","im","id","home","hid","hes","heres","giving","gave","fix","ff","et-al","effect","ed","date","ca","briefly","biol","begins","beginnings","beginning","auth","arise","arent","aren","approximately","apparently","anymore","announce","ah","affects","affecting","affected","adopted","added","act","accordance","abst","twenty","twelve","top","thin","thick","ten","system","sixty","sincere","side","show","put","part","myse”","move","mill","itse”","interest","himse","herse","hasnt","give","full","front","forty","fire","find","fill","fifty","fifteen","empty","eleven","due","detail","describe","de","cry","couldnt","con","computer","call","bottom","bill","amount","www","I","z","y","x","w","uucp","u","t","s","r","q","p","o","n","m","l","j","h","g","f","e","d","c","b","why'\''s","when'\''s","i","how'\''s","a","zero","you'\''ve","yourselves","yourself","yours","you'\''re","your","you'\''ll","you'\''d","you","yet","yes","wouldn'\''t","would","won'\''t","wonder","without","within","with","wish","willing","will","why","whose","who'\''s","whomever","whom","who'\''ll","whole","whoever","who'\''d","who","whither","whilst","while","whichever","which","whether","wherever","whereupon","where'\''s","wherein","whereby","whereas","whereafter","where","whenever","whence","when","what'\''ve","what'\''s","what'\''ll","whatever","what","we'\''ve","weren'\''t","we'\''re","were","went","we'\''ll","well","welcome","we'\''d","we","way","wasn'\''t","was","wants","want","vs","viz","via","very","versus","various","value","v","usually","using","uses","useful","used","use","us","upwards","upon","up","unto","until","unlikely","unlike","unless","unfortunately","undoing","underneath","under","un","two","twice","t'\''s","trying","try","truly","tries","tried","towards","toward","took","too","together","to","till","thus","thru","throughout","through","three","though","those","thoroughly","thorough","this","thirty","third","think","things","thing","they'\''ve","they'\''re","they'\''ll","they'\''d","they","these","there'\''ve","thereupon","there'\''s","theres","there'\''re","there'\''ll","therein","therefore","there'\''d","thereby","thereafter","there","thence","then","themselves","them","theirs","their","the","that'\''ve","that'\''s","thats","that'\''ll","that","thanx","thanks","thank","than","th","tends","tell","taking","taken","take","sure","sup","such","sub","still","specifying","specify","specified","sorry","soon","somewhere","somewhat","sometimes","sometime","something","someone","somehow","someday","somebody","some","so","six","since","shouldn'\''t","should","she'\''s","she'\''ll","she'\''d","she","shan'\''t","shall","several","seven","seriously","serious","sent","sensible","selves","self","seen","seems","seeming","seemed","seem","seeing","see","secondly","second","says","saying","say","saw","same","said","round","right","respectively","relatively","regards","regardless","regarding","recently","recent","reasonably","really","re","rd","rather","qv","quite","que","provides","provided","probably","presumably","possible","plus","please","placed","perhaps","per","past","particularly","particular","own","overall","over","outside","out","ourselves","ours","our","oughtn'\''t","ought","otherwise","others","other","or","opposite","onto","only","one'\''s","ones","one","once","on","old","okay","ok","oh","often","off","of","obviously","nowhere","now","novel","notwithstanding","nothing","not","normally","nor","no-one","noone","nonetheless","none","non","nobody","no","ninety","nine","next","new","nevertheless","neverless","neverf","never","neither","needs","needn'\''t","need","necessary","nearly","near","nd","namely","name","myself","my","mustn'\''t","must","much","mrs","mr","mostly","most","moreover","more","miss","minus","mine","mightn'\''t","might","merely","meanwhile","meantime","mean","me","mayn'\''t","maybe","may","many","makes","make","mainly","made","ltd","lower","low","looks","looking","look","little","likewise","likely","liked","like","let'\''s","let","lest","less","least","latterly","latter","later","lately","last","knows","known","know","kept","keeps","keep","k","just","i'\''ve","itself","it'\''s","its","it'\''ll","it'\''d","it","isn'\''t","is","inward","into","instead","insofar","inside","inner","indicates","indicated","indicate","indeed","inc.","inc","inasmuch","in","immediate","i'\''m","i'\''ll","ignored","if","ie","i'\''d","hundred","however","howbeit","how","hopefully","hither","his","himself","him","hi","he'\''s","herself","hers","hereupon","here'\''s","herein","hereby","hereafter","here","her","hence","help","hello","he'\''ll","he'\''d","he","having","haven'\''t","have","hasn'\''t","has","hardly","happens","half","hadn'\''t","had","greetings","gotten","got","gone","going","goes","go","gives","given","getting","gets","get","furthermore","further","from","four","found","forward","forth","formerly","former","forever","for","follows","following","followed","five","first","fifth","fewer","few","farther","far","fairly","except","example","exactly","ex","everywhere","everything","everyone","everybody","every","evermore","ever","even","etc","et","especially","entirely","enough","ending","end","elsewhere","else","either","eighty","eight","eg","edu","each","during","downwards","down","don'\''t","done","doing","doesn'\''t","does","do","directly","different","didn'\''t","did","despite","described","definitely","daren'\''t","dare","currently","c'\''s","course","couldn'\''t","could","corresponding","contains","containing","contain","considering","consider","consequently","concerning","comes","come","com","co.","co","c'\''mon","clearly","changes","certainly","certain","causes","cause","caption","can'\''t","cant","cannot","can","came","by","but","brief","both","beyond","between","better","best","besides","beside","below","believe","being","behind","begin","beforehand","before","been","becoming","becomes","become","because","became","be","backwards","backward","back","awfully","away","available","at","associated","asking","ask","aside","a'\''s","as","around","aren'\''t","are","appropriate","appreciate","appear","apart","anywhere","anyways","anyway","anything","anyone","anyhow","anybody","any","another","and","an","amongst","among","amidst","amid","am","always","although","also","already","alongside","along","alone","almost","allows","allow","all","ain'\''t","ahead","ago","against","again","afterwards","after","adj","actually","across","accordingly","according","abroad","above","about","able"]' "https://solr1server.<url_entorno>:8983/solr/kerno/schema/analysis/stopwords/english"

Explicación a Alto Nivel:

Se actualiza el recurso spanish e english para incluir un conjunto extenso de stopwords en español e inglés. Estas palabras se ignorarán durante la indización y la consulta, mejorando la relevancia de los resultados.

3. Configuración de Tipos de Campo de búsqueda Personalizados

3.1 ¿Qué es un wildcard en el contexto de búsquedas?

En motores de búsqueda como SOLR, un wildcard (comodín) permite que el usuario encuentre resultados aunque solo escriba una parte de la palabra.
Ejemplos clásicos:

  • ana* encuentra analytics, análisis, anagrama.

  • *meta* encuentra telemetría, metadatos, parametría.

Pero los wildcards explícitos (usando *) son costosos para SOLR, especialmente si aparecen al principio (*ana) porque obligan a escanear muchas entradas.

Por eso existe la estrategia de activar funcionalidad tipo wildcard “implícita” mediante un tipo de campo diseñado para fragmentar el texto y permitir coincidencias parciales sin necesidad de usar * en la consulta.

3.2 ¿Para qué sirve el tipo de campo text_general_anjana_wildcard?

Este tipo de campo se crea dentro del esquema de SOLR para que ciertas búsquedas no dependan de la palabra exacta, sino que permitan:

  • Coincidencias parciales

  • Coincidencias con fragmentos

  • Búsquedas flexibles sin necesidad de que el usuario introduzca un wildcard

En otras palabras:

El campo transforma los textos en n-gramas (fragmentos) o tokens apropiados, permitiendo que escribir solo parte de una palabra ya devuelva resultados.

3.3 Creación de text_general_anjana_wildcard (Para Búsquedas Parciales)

Este tipo de campo está diseñado para permitir búsquedas que funcionen bien con fragmentos de palabras o búsquedas comodín (wildcard) implícitas.

Comando de Ejemplo (Creación de Tipo de Campo Wildcard):

curl -k -X POST -H 'Content-type:application/json' -d '{
  "add-field-type": {
    "name": "text_general_anjana_wildcard",
    "class": "solr.TextField",
    "positionIncrementGap": "100",
    "multiValued": true,
    "indexAnalyzer": {
      "tokenizer": {
        "class": "solr.NGramTokenizerFactory",
        "minGramSize": "3",
        "maxGramSize": "100"
      },
      "filters": [
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.LowerCaseFilterFactory"
        }
      ]
    },
    "queryAnalyzer": {
      "tokenizer": {
        "class": "solr.StandardTokenizerFactory"
      },
      "filters": [
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.LowerCaseFilterFactory"
        }
      ]
    }
  }
}' https://solr1server.<url_entorno>:8983/solr/kerno/schema

Explicación a Alto Nivel:

Se añade el nuevo tipo de campo text_general_anjana_wildcard. La clave aquí es el uso de solr.NGramTokenizerFactory en el indexAnalyzer con minGramSize: 3. Esto divide las palabras en subcadenas de 3 o más caracteres durante la indización (e.g., "dato" se indexa como "dat", "ato", "dato"), facilitando las búsquedas parciales. Se aplican los filtros de stopwords y minúsculas.

3.4. Reemplazo de text_general (Para Búsqueda de Texto Estándar)

Este paso mejora el análisis de texto estándar utilizado por muchos campos en SOLR.

Comando de Ejemplo (Reemplazo de text_general):

curl -k -X POST -H 'Content-type:application/json' -d '{
  "replace-field-type": {
    "name": "text_general",
    "class": "solr.TextField",
    "positionIncrementGap": "100",
    "multiValued": true,
    "indexAnalyzer": {
      "tokenizer": {
        "class": "solr.StandardTokenizerFactory"
      },
      "filters": [
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.LowerCaseFilterFactory"
        },
        {
          "class": "solr.SpanishLightStemFilterFactory"
        },
        {
          "class": "solr.SnowballPorterFilterFactory"
        }
      ]
    },
    "queryAnalyzer": {
      "tokenizer": {
        "class": "solr.StandardTokenizerFactory"
      },
      "filters": [
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.SynonymGraphFilterFactory",
          "expand": "true",
          "ignoreCase": "true",
          "synonyms": "synonyms.txt"
        },
        {
          "class": "solr.LowerCaseFilterFactory"
        },
        {
          "class": "solr.SpanishLightStemFilterFactory"
        },
        {
          "class": "solr.SnowballPorterFilterFactory"
        }
      ]
    }
  }
}' https://solr1server.<url_entorno>:8983/solr/kerno/schema

Explicación a Alto Nivel:

Se reemplaza la definición del tipo de campo text_general para:

  • Aplicar Stemming: Se añaden solr.SpanishLightStemFilterFactory y solr.SnowballPorterFilterFactory para lematizar las palabras (reducirlas a su raíz, e.g., "corriendo" a "corr-"). Esto mejora la coincidencia de resultados.

  • Aplicar Sinónimos: Se incluye solr.SynonymGraphFilterFactory en el queryAnalyzer para expandir las búsquedas usando un archivo de sinónimos (synonyms.txt), permitiendo que la búsqueda de una palabra clave también encuentre sus sinónimos.

3.5. Reemplazo de text_general_anjana (Para Campos Ordenables)

Este tipo de campo generalmente se usa para campos cuyo contenido debe ser analizado pero también debe ser apto para ordenación (sort).

Comando de Ejemplo (Reemplazo de text_general_anjana):

curl -k -X POST -H 'Content-type:application/json' -d '{
  "replace-field-type": {
    "name": "text_general_anjana",
    "class": "solr.SortableTextField",
    "multiValued": true,
    "indexAnalyzer": {
      "tokenizer": {
        "class": "solr.KeywordTokenizerFactory"
      },
      "filters": [
        {
          "class": "solr.LowerCaseFilterFactory"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.ASCIIFoldingFilterFactory"
        },
        {
          "class": "solr.SpanishLightStemFilterFactory"
        },
        {
          "class": "solr.SnowballPorterFilterFactory"
        }
      ]
    },
    "queryAnalyzer": {
      "tokenizer": {
        "class": "solr.KeywordTokenizerFactory"
      },
      "filters": [
        {
          "class": "solr.LowerCaseFilterFactory"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "spanish"
        },
        {
          "class": "solr.ManagedStopFilterFactory",
          "managed": "english"
        },
        {
          "class": "solr.ASCIIFoldingFilterFactory"
        },
        {
          "class": "solr.SpanishLightStemFilterFactory"
        },
        {
          "class": "solr.SnowballPorterFilterFactory"
        }
      ]
    }
  }
}' https://solr1server.<url_entorno>:8983/solr/kerno/schema

Explicación a Alto Nivel:

Se reemplaza la definición del tipo de campo text_general_anjana. Este utiliza un KeywordTokenizerFactory, lo que significa que el texto completo se trata como un solo token (útil para la ordenación). Los filtros se aplican para garantizar la coherencia: minúsculas, eliminación de acentos (ASCIIFoldingFilterFactory), stopwords y stemming.

4. Aplicación de un Tipo de Campo a un Campo Específico

Finalmente, se asigna el nuevo tipo de campo text_general_anjana_wildcard al campo principal OBJ_NAME para optimizar las búsquedas por nombre de activo.

Comando de Ejemplo (Asignación de Tipo de Campo):

curl -k -X POST -H 'Content-type:application/json' --data-binary '{  "replace-field":{        "name":"OBJ_NAME",        "type":"text_general_anjana_wildcard",     "indexed":true,        "required":true,      "stored":true} }' https://solr1server.<url_entorno>:8983/solr/kerno/schema

En caso de que en el siguiente paso se produjera un error de indexación, lanzar el siguiente comando:

curl -k -X POST -H 'Content-type:application/json' --data-binary '{  "replace-field":{        "name":"OBJ_NAME",        "type":"text_general_anjana_wildcard",        "multiValued":false,        "indexed":true,        "required":true,        "stored":true} }' <https://solr1server.<url_entorno>>:8983/solr/kerno/schema

Explicación a Alto Nivel:

Se reemplaza la definición del campo OBJ_NAME para que ahora utilice el tipo de campo text_general_anjana_wildcard que configuramos en el punto 3.1. Esto habilita el comportamiento de búsqueda parcial (wildcard) en el campo del nombre del activo, mejorando drásticamente la capacidad de encontrar activos incluso con términos de búsqueda incompletos.

5. Borrar el contenido de la colección de Kerno y reindexar

Para borrar el contenido de la colección de Kerno, se debe acceder al frontal de SOLR y lanzar el siguiente comando:

<delete><query>*:*</query></delete>
image-20251211-170718.png
Frontal de SOLR: Borrado del contenido de la colección de SOLR

A continuación, de debe acceder al Portal de Administración de Anjana Data Platform y reindexar (Actions> Force indexing)

image-20251211-170949.png
Panel de configuración: Forzar reindexación

Eliminar las configuraciones del buscador

Para eliminar cualquier configuración del buscador, se deben seguir los siguientes pasos:

  1. Borrar la colección de Kerno con borrado de esquemas a través de la API. Ver https://wiki.anjanadata.com/es/integraciones/25.2/api-doc

  2. Reiniciar el microservicio de Minerva para recrear las colecciones

systemctl restart minerva