サーチ…


備考

カスタムJavaクラスベースのフィールドに関する注釈:

これは、カスタムフィールドコンパレータに基づいてSolrドキュメントをソートするために書き込まれた外部フィールドを使用して、Solrで大きな記事カスタムソートの小さなセクションです。

既存のSolrフィールドから作成されたカスタムフィールドに関する注釈:

Apacheは、このトピックについての詳細なドキュメントを作成しました。 - アナライザ、トークナイザ、およびフィルタについて

独自のカスタム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);
    }
}

使用可能なフィールドタイプからカスタムフィールドタイプを作成する

この例に移る前に、理論的な知識を得ましょう。ここでは、 AnalyzersTokenizers 、およびFiltersの 3つの重要な用語が使用されています。このようなカスタムフィールドを作成するには、1つのトークナイザと1つ以上のフィルタでアナライザを作成する必要があります。 ここで説明したよう 、アナライザごとにトークナイザを1つだけ持つことができますが、この制限を克服する方法があります。

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

説明付きのもう1つの例:

<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の標準フィルタを通過し、頭字語からドットを削除し、その他の一般的な操作を実行します。すべてのトークンは小文字に設定され、クエリ時に大文字と小文字を区別しない一致を容易にします。上記の例の最後のフィルタは、Porterステミングアルゴリズムを使用するステマーフィルタです。ステマーは基本的に、単語のさまざまな形をそれらが派生するベース、つまりステムにマップするマッピング規則のセットです。例えば、英語では、「抱擁」、「抱擁」および「抱擁」という言葉はすべて、幹語「抱擁」のすべての形態です。ステムマーは、これらの用語のすべてを「ハグ」に置き換えます。これは索引付けされるものです。つまり、「ハグ」のクエリは「ハグ」という用語と一致しますが、「巨大」は一致しません。

このようなカスタムフィールドの使用例:

<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