我发现我可以使用不同的标记器/分析器为text_general
字段使用不同的语言
但也存在text_en
。
为什么我们需要两个?
假设我们有一个亚洲语句,句子中也包含一些英语单词
text_general
用于句子中的亚洲单词,text_en
用于英语单词?
solr如何索引/查询这样的句子?
答案 0 :(得分:3)
text_en使用词干,因此如果您搜索fakes
,则可以匹配fake
,fake's
,faking
等。使用非词干字段fakes
将仅匹配fakes
。
每个字段使用不同的“链”分析器。 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"/>
答案 1 :(得分:2)
Why do we need two?
这样您就可以区分不同的内容。或者您甚至可以根据需要以不同的方式分析相同的内容(使用copyField)。这样可以在查询时为您提供更多关于要查询的字段的选择。
text_general is used for the asian words in the sentence and text_en for english words?
不,每个字段只能有一个fieldType
,就像数据库一样。
如果您想对同一字段中的不同语言进行不同的分析,那么您可以查看SmartChineseAnalyzer作为示例。
另见http://docs.lucidworks.com/display/LWEUG/Multilingual+Indexing+and+Search