Solr中text_general和text_en的区别是什么?

7
我发现我可以为text_general字段使用不同的分词器/分析器来处理不同的语言。
但同时也存在text_en字段。
为什么我们需要两个字段?
假设我们有一句话是用亚洲语言写的,但是这句话中包含了一些英语单词。Solr要怎样索引/查询这种句子呢?
text_general字段用于处理该句话中的亚洲语言单词,而text_en字段则用于处理其中的英语单词。请注意,HTML标签应保留且不需解释。
2个回答

5

text_en使用词干处理,因此如果您搜索fakes,则可以匹配fakefake'sfaking等。对于未经过词干处理的字段fakes,只能匹配fakes

每个字段都使用不同的分析器“链”。text_en使用一系列过滤器来更好地索引英文。请参见tokenizerfilter条目。

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

2

为什么我们需要两个字段?

这样您就可以对不同的内容进行不同的分析。或者,如果您想要,在同一内容上甚至可以通过使用copyField来进行不同的分析。这样在查询时,您就有更多关于要查询哪个字段的选择。

text_general用于句子中的亚洲文字,而text_en用于英文字吗?

不是的,每个字段只能有一个fieldType,就像数据库一样。

如果您想在同一个字段内对不同语言进行不同的分析,那么您可以查看SmartChineseAnalyzer作为例子。

此外,还请参阅http://docs.lucidworks.com/display/LWEUG/Multilingual+Indexing+and+Search


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接