Buscar..


Observaciones

Comentarios sobre el campo personalizado basado en clase Java:

Esta es una pequeña sección de un gran artículo de clasificación personalizada en Solr que utiliza un campo externo escrito para ordenar los documentos de Solr según el comparador de campos personalizados.

Observaciones sobre el campo personalizado creado a partir de campos Solr existentes:

Apache ha creado una documentación detallada sobre este tema: Comprensión de los analizadores, los simuladores y los filtros .

Cree un tipo de campo Solr personalizado desde su propia clase Java personalizada

Cambios de esquema:

Deberá definir un nuevo tipo de campo en su archivo de esquema de solr y luego podrá crear campos de ese tipo. Ejemplo de fragmento de esquema:

<!-- Source: solr/example/.../conf/schema.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="adam" version="1.3">
  <types>
    ...
    <fieldType name="rank_t" class="org.apache.solr.schema.ext.RankFieldType"/>
  </types>
 <fields>
   ...
   <field name="rank" type="rank_t" indexed="true" stored="true"/>
 </fields>
 ...
</schema>

Clase de Java para el tipo de campo personalizado:

// Source: src/java/org/apache/solr/schema/ext/RankFieldType.java
package org.apache.solr.schema.ext;

import java.io.IOException;

import org.apache.lucene.document.Fieldable;
import org.apache.lucene.search.SortField;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.ext.RankFieldComparatorSource;

public class RankFieldType extends FieldType {

    @Override
    public SortField getSortField(SchemaField field, boolean top) {
        return new SortField(field.getName(), new RankFieldComparatorSource(), top);
    }

    @Override
    // copied verbatim from GeoHashField method
    public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
         writer.writeStr(name, f.stringValue(), false);
    }
}

Crear un tipo de campo personalizado a partir de los tipos de campo disponibles

Obtengamos algunos conocimientos teóricos antes de pasar al ejemplo. Hay tres términos importantes que se utilizan aquí: Analizadores , Tokenizadores y Filtros . Para crear dicho campo personalizado, deberá crear un analizador con un tokenizador y uno o más filtros. Como se mencionó aquí , solo puede tener un tokenizador por analizador, pero hay formas de superar esta limitación.

<fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" replace="all" replacement="" pattern="([^a-z])"/>
  </analyzer>
</fieldType>

Otro ejemplo:

<fieldType name="lowercase_text" class="solr.TextField" positionIncrementGap="150">
  <analyzer>
     <tokenizer class="solr.KeywordTokenizerFactory" />
     <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

Un ejemplo más con descripción:

<fieldType name="text_stem" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory"/>
  </analyzer>
</fieldType>

Este ejemplo comienza con el tokenizador estándar de Solr, que rompe el texto del campo en tokens. Esos tokens luego pasan a través del filtro estándar de Solr, que elimina puntos de las siglas y realiza algunas otras operaciones comunes. Todos los tokens se establecen en minúsculas, lo que facilitará la coincidencia entre mayúsculas y minúsculas en el momento de la consulta. El último filtro en el ejemplo anterior es un filtro stemmer que utiliza el algoritmo de derivación Porter. Un stemmer es básicamente un conjunto de reglas de mapeo que mapea las diversas formas de una palabra de nuevo a la base, o stem, palabra de la que derivan. Por ejemplo, en inglés, las palabras "abrazos", "abrazar" y "abrazar" son todas formas de la palabra madre "abrazo". El stemmer reemplazará todos estos términos con "abrazo", que es lo que se indexará. Esto significa que una consulta de "abrazo" coincidirá con el término "abrazado", pero no "enorme".

Ejemplo de uso de dicho campo personalizado:

<field name="keywords" type="text_stem" indexed="true" stored="true" />

Lista de tipos de tokenizer disponibles: lista de tipos de tokenizer

Lista de tipos de filtro disponibles: lista de tipos de filtro



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow