수색…


비고

사용자 정의 Java 클래스 기반 필드에 대한 설명 :

이것은 커스텀 필드 비교자를 기반으로 Solr 문서를 정렬하기 위해 작성된 외부 필드를 사용하여 Solr에서 큰 기사 커스텀 정렬 의 작은 부분입니다.

기존 Solr 필드에서 생성 된 사용자 정의 필드에 대한 설명 :

Apache는이 주제에 대한 자세한 문서를 만들었습니다 - 분석기, 토큰 화 도구 및 필터 이해하기 .

자체 사용자 정의 Java 클래스에서 사용자 정의 Solr 필드 유형 작성

스키마 변경 :

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

사용 가능한 필드 유형에서 사용자 정의 필드 유형 생성

예제로 이동하기 전에 이론적 지식을 얻자. 여기에는 세 가지 중요한 용어 인 Analyzers , TokenizersFilters 가 사용됩니다. 이러한 사용자 정의 필드를 만들려면 하나의 토크 나이저와 하나 이상의 필터로 분석기를 작성해야합니다. 여기 에서 언급했듯이 분석기 당 하나의 토크 나이저 만 가질 수 있지만이 제한을 극복 할 수있는 방법이 있습니다.

<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의 표준 필터를 통과합니다. 모든 토큰은 소문자로 설정되므로 쿼리시 대소 문자를 구분하지 않고 일치시킬 수 있습니다. 위 예제의 마지막 필터는 Porter 스터 밍 알고리즘을 사용하는 스템 필터입니다. 형태소 분석기는 기본적으로 다양한 형태의 단어를 기본 단어 또는 줄기 단어로 다시 매핑하는 매핑 규칙 집합입니다. 예를 들어, 영어로 "hugs", "hugging"및 "hugged"는 줄기 단어 "hug"의 모든 형태입니다. 줄기 해석기는이 모든 용어를 "포옹 (hug)"으로 바꿀 것이며, 이것이 색인 될 것입니다. 즉 "hug"에 대한 쿼리는 "hugged"용어와 일치하지만 "huge"는 일치하지 않습니다.

이러한 사용자 정의 필드의 사용 예 :

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

사용 가능한 tokenizer 유형 목록 : tokenizer 유형 목록

사용 가능한 필터 유형 목록 : 필터 유형 목록



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow