5

text_generalフィールドの言語ごとに異なるトークナイザー/アナライザーを使用できることがわかりました。
しかし、存在するtext_enこともあります。

なぜ2つ必要なのですか?

アジア言語の文があり、その文にいくつかの英語の単語が含まれているとします。
text_generalは文中のアジア語とtext_en英語の単語に使用されますか?
solr はどのようにそのような文をインデックス/クエリしますか?

4

2 に答える 2

3

text_en はステミングを使用するため、 を検索すると、などとfakes一致します。ステミングされていないフィールドでは のみと一致します。fakefake'sfakingfakesfakes

各フィールドは、アナライザーの異なる「チェーン」を使用します。text_en は、英語をより適切にインデックス化する一連のフィルターを使用します。tokenizerおよびのfilterエントリを参照してください。

text_general のスキーマの抜粋:

<!-- A general text field that has reasonable, generic
     cross-language defaults: it tokenizes with StandardTokenizer,
 removes stop words from case-insensitive "stopwords.txt"

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    <filter class="solr.LowerCaseFilterFactory"/>

text_en のスキーマの抜粋:

<!-- A text field with defaults appropriate for English: it
     tokenizes with StandardTokenizer, removes English stop words
     (lang/stopwords_en.txt), down cases, protects words from protwords.txt, and
     finally applies Porter's stemming.  The query time analyzer
     also applies synonyms from synonyms.txt. -->
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="lang/stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
于 2013-06-07T05:06:05.333 に答える
2

Why do we need two?

さまざまなコンテンツを異なる方法で分析できるようにします。または、必要に応じて、同じコンテンツを ( copyFieldを使用して) 別の方法で分析することもできます。これにより、照会するフィールドについて、照会時により多くの選択肢が提供されます。

text_general is used for the asian words in the sentence and text_en for english words?

いいえ、データベースと同じように、各フィールドには 1 つのみを含めることができfieldTypeます。

同じフィールド内で異なる言語に対して異なる分析を行いたい場合は、例としてSmartChineseAnalyzerを参照してください。

http://docs.lucidworks.com/display/LWEUG/Multilingual+Indexing+and+Searchも参照してください。

于 2013-06-07T03:58:41.750 に答える