Ricerca…


Osservazioni

Note sul campo personalizzato basato su classi Java:

Questa è una piccola sezione di un ordinamento personalizzato di grandi dimensioni in Solr usando un campo esterno scritto per ordinare i documenti Solr in base al confronto di campi personalizzato.

Osservazioni sul campo personalizzato creato dai campi Solr esistenti:

Apache ha creato una documentazione dettagliata su questo argomento: Understanding Analyzers, Tokenizers e Filters .

Creare un tipo di campo Solr personalizzato dalla propria classe Java personalizzata

Modifiche allo schema:

Sarà necessario definire un nuovo tipo di campo nel file dello schema solr e quindi creare campi di quel tipo. Esempio di snippet di schema:

<!-- 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>

Classe Java per tipo di campo personalizzato:

// 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);
    }
}

Crea un tipo di campo personalizzato dai tipi di campo disponibili

Prendiamo alcune conoscenze teoriche prima di passare all'esempio. Ci sono tre termini importanti usati qui Analizzatori , Tokenizer e Filtri . Per creare questo campo personalizzato dovrai creare un analizzatore con un tokenizer e uno o più filtri. Come accennato qui , puoi avere un solo tokenizer per analizzatore ma ci sono modi per superare questa limitazione.

<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>

Un altro esempio:

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

Un altro esempio con descrizione:

<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>

Questo esempio inizia con il tokenizer standard di Solr, che spezza il testo del campo in token. Questi token passano quindi attraverso il filtro standard di Solr, che rimuove i punti dagli acronimi ed esegue alcune altre operazioni comuni. Tutti i token vengono quindi impostati in caratteri minuscoli, il che facilita la corrispondenza senza distinzione tra maiuscole e minuscole al momento della query. L'ultimo filtro nell'esempio precedente è un filtro dello stemmer che utilizza l'algoritmo di Porter. Uno stemmer è fondamentalmente un insieme di regole di mappatura che mappano le varie forme di una parola alla base, o radice, parola da cui derivano. Ad esempio, in inglese le parole "hugs", "hugging" e "hugged" sono tutte forme della parola radice "hug". Lo stemmer sostituirà tutti questi termini con "hug", che è ciò che verrà indicizzato. Ciò significa che una query per "abbraccio" corrisponderà al termine "abbracciato", ma non "enorme".

Esempio di utilizzo di tale campo personalizzato:

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

Elenco dei tipi di tokenizer disponibili: elenco dei tipi di tokenizer

Elenco dei tipi di filtro disponibili: elenco dei tipi di filtro



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow