Поиск…


замечания

Замечания о пользовательском поле класса Java:

Это небольшой раздел большой сортировки статей в Solr с использованием внешнего поля, написанного для сортировки документов Solr на основе пользовательского полевого компаратора.

Замечания о настраиваемом поле, созданное из существующих полей Solr:

Apache создал подробную документацию по этой теме - « Понимание анализаторов, токенизаторов и фильтров» .

Создайте собственный тип поля Solr из собственного пользовательского класса Java

Изменения схемы:

Вам нужно будет определить новый тип поля в вашем файле схемы solr, а затем вы можете создавать поля этого типа. Пример фрагмента схемы:

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

Класс Java для настраиваемого типа поля:

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

Создание настраиваемого типа поля из доступных типов полей

Давайте перейдем к примеру с некоторыми теоретическими знаниями. Здесь используются три важных термина: анализаторы , токенизаторы и фильтры . Чтобы создать такое настраиваемое поле, вам необходимо создать анализатор с одним токенизатором и одним или несколькими фильтрами. Как уже упоминалось здесь , вы можете иметь только один Tokenizer каждого анализатора , но есть способы , чтобы преодолеть это ограничение.

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

Другой пример:

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

Еще один пример с описанием:

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

Этот пример начинается с стандартного токенизатора Solr, который разбивает текст поля на токены. Затем эти токены проходят через стандартный фильтр Solr, который удаляет точки из аббревиатур и выполняет несколько других общих операций. Затем все маркеры устанавливаются в нижнем регистре, что облегчит совпадение с учетом регистра во время запроса. Последний фильтр в приведенном выше примере представляет собой фильтр стволовых фильтров, в котором используется алгоритм строгания Портера. Штокмер - это в основном набор правил отображения, который отображает различные формы слова обратно на основание или слово, из которого они выводятся. Например, на английском языке слова «объятия», «обнимания» и «обнимания» - это все формы слова «обнять». Штокмер заменит все эти термины «объятием», который будет проиндексирован. Это означает, что запрос «hug» будет соответствовать термину «обниматься», но не «огромным».

Пример использования такого настраиваемого поля:

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

Список доступных типов токенизаторов: список типов токенизаторов

Список доступных типов фильтров: список типов фильтров



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow