? ?Field就是一个字段,定义一个Field很简单:
?
?
<field name="tile" type="string" indexed="true" stored="true"/>
?Field的属性也和FieldType类似,他的属性会覆盖掉FieldType的同名属性。
?
?
? ? ? ?你可能想让document的一些字段可以多次使用。solr 有一个字段复制机制,可以提交多个不同类型字段集中到一个字段,如将title字段和content字段复制到一个新的字段中,这样新的字段中就具有这两个字段的内容了。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段,以下是个例子:
<
copyField
source
=
"cat"
dest
=
"text"
maxChars
=
"30000"
/>
上例中,如果cat字段有数据的话,cat字段的内容将被添加到text字段中。maxChars 参数,一个int类型参数,用于限制复制的字符数。source和destination都支持通配符。以下是一个将所有以 _t 结尾的字段全部复制到text字段中。
<
copyField
source
=
"*_t"
dest
=
"text"
maxChars
=
"25000"
/>
?
? ? ? ?其实说的简单一点,比如现在你要查询包涵"Java"的博客, 那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,where tittle like ‘%Java%‘ ?or ?content like ‘%Java%‘. ? 这个时候copyField就派上用场了, 定义一个新字段,将title和content 复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目地了。 ?这便是copyField的典型应用场景。
?
? ??注意:如果dest由多个source构成,就需要将其指定为multiValued。? ?
?
?
<schema name="eshequn.post.db_post.0" version="1.1" xmlns:xi="http://www.w3.org/2001/XInclude"> <fields> <!-- for title --> <field name="t" type="text" indexed="true" stored="false" /> <!-- for abstract --> <field name="a" type="text" indexed="true" stored="false" /> <!-- for title and abstract --> <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/> </fields> <copyField source="t" dest="ta" /> <copyField source="a" dest="ta" /> </schema>
?
?
?
Solr中的Field、CopyField、DynamicField
原文:http://josh-persistence.iteye.com/blog/2247334