Szukaj…


Uwagi

Uwagi na temat niestandardowego pola opartego na klasie Java:

Jest to niewielka część dużego sortowania niestandardowych artykułów w Solr przy użyciu zewnętrznego pola napisanego do sortowania dokumentów Solr na podstawie niestandardowego komparatora pól.

Uwagi na temat niestandardowego pola utworzonego z istniejących pól Solr:

Apache stworzył szczegółową dokumentację na ten temat - Zrozumienie analizatorów, tokenizatorów i filtrów .

Utwórz niestandardowy typ pola Solr z własnej niestandardowej klasy Java

Zmiany schematu:

Musisz zdefiniować nowy typ pola w pliku schematu solr, a następnie możesz utworzyć pola tego typu. Przykładowy fragment schematu:

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

Klasa Java dla niestandardowego typu pola:

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

Utwórz niestandardowy typ pola z dostępnych typów pól

Zanim przejdziemy do przykładu, zdobądźmy trochę wiedzy teoretycznej. Stosowane są tutaj trzy ważne terminy: Analizatory , Tokenizery i Filtry . Aby utworzyć takie niestandardowe pole, musisz utworzyć analizator z jednym tokenizerem i jednym lub większą liczbą filtrów. Jak wspomniano tutaj , możesz mieć tylko jeden tokenizer na analizator, ale są sposoby na przezwyciężenie tego ograniczenia.

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

Inny przykład:

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

Jeszcze jeden przykład z opisem:

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

Ten przykład zaczyna się od standardowego tokenizera Solr, który dzieli tekst pola na tokeny. Tokeny te przechodzą następnie przez standardowy filtr Solr, który usuwa kropki z akronimów i wykonuje kilka innych typowych operacji. Wszystkie tokeny są następnie ustawione na małe litery, co ułatwi dopasowanie bez rozróżniania wielkości liter w czasie zapytania. Ostatnim filtrem w powyższym przykładzie jest filtr stempera, który korzysta z algorytmu pochodnego Portera. Stemper jest zasadniczo zbiorem reguł mapowania, które odwzorowują różne formy słowa z powrotem do bazy, czyli trzonu, słowa, z którego pochodzą. Na przykład w języku angielskim słowa „uściski”, „przytulanie” i „przytulanie” są formami słowa rdzeń „przytulić”. Stemper zastąpi wszystkie te słowa słowem „przytul”, które będzie indeksowane. Oznacza to, że zapytanie „hug” będzie pasować do terminu „hug”, ale nie będzie „ogromny”.

Przykład użycia takiego niestandardowego pola:

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

Lista dostępnych typów tokenizera: lista rodzajów tokenizera

Lista dostępnych typów filtrów: lista typów filtrów



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow