2016-12-03 5 views
0

私はSolr 5.5.2とLucene 5.5.2を使っています。Lucene/Solrで私のカスタムトークナイザを正しく実装する方法は?

私がしようとしているのは、テキストをスラッシュ記号で区切ってカスタムトークナイザを作成することです。ここで

は、コードサンプルです:

public class SlashSymbolTokenizer extends CharTokenizer { 

public SlashSymbolTokenizer() { 
} 

public SlashSymbolTokenizer(AttributeFactory factory) { 
    super(factory); 
} 

@Override 
protected boolean isTokenChar(int c) { 
    return c != 47 && c != 92; 
} 
} 

のschema.xml

<fieldType name="string_with_slash_tokenizer" class="solr.TextField" sortMissingLast="true"> 
<analyzer> 
    <tokenizer class="tokenizer.SlashSymbolTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

とフィールド"color":"Black/white"のインデックス時点で、このトークナイザを適用した後、私は私が何かを照会することによって、さらにそれを一致させることができることを前提とし"color":"black white"のように動作しますが、このフィールドは初期値とのみ一致します"Black/white"

何が間違っていますか私の実装ですか?あなたはなにか考えはありますか ?

ありがとうございます!

+0

あなたは '色を検索する場合何が起こるか:?!私のトークナイザがI適用された後Black' root545 @ – root545

+0

を、私はそれを得ました「黒」または「白」のトークンのいずれかで文書に一致させることができますが、スラッシュの代わりに空白を両方とも使用することはできません。 – MadCat45

答えて

1

のみトークン化/上のあなたのトークナイザので、「黒白」のクエリは、コンテンツblack whiteを持つ単一のトークンになります。そのトークンがblackまたはwhiteと一致しないため、一致するものは見つかりません。

/と同様に空白文字でトークン化したい場合は、それを自分のコードで処理するか、WordDelimiterFilterのようなものを使うことができます。またWhitespaceTokenizerを使用して/によって分割するWordDelimiterFilterにカスタム区切り文字リストを使用するか、(例えば/と空白の両方を使用してテキストを分割するために、正規表現の独自のセットを提供するためにPatternTokenizerを使用することができます。

があなたのフィールドが処理され、トークン化された方法を正確に確認するためにSolrの管理下分析]ページを使用し

関連する問題