Solr4.7---Field、CopyField、DynamicField

Field:web

   Field就是一个字段,定义一个Field很简单:post


基本上属性也和FieldType相似,他的属性会覆盖掉FieldType的同名属性。 spa


CopyField(本段内容直接从solr中文网copy而来):code

      

你可能想让document的一些字段能够屡次使用。solr 有一个字段复制机制,能够提交多个不一样类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另外一个是要复制到哪一个字段,如下是个例子:orm

1
<     copyField     source     =     "cat"     dest     =     "text"     maxChars     =     "30000"     />

上例中,若是text字段有数据的话,cat字段的内容将被添加到text字段中。maxChars 参数,一个int类型参数,用于限制复制的字符数。xml

source和destination都支持通配符。如下是一个将全部以 _t 结尾的字段所有复制到text字段中。索引

1
<     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。ci

在网上找了一个例子:文档

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

DynamicField:博客

   

动态字段(Dynamic fields)容许 solr 索引没有在 schema 中明肯定义的字段。这个在忘记定义一些字段时颇有用。动态字段可让系统更灵活,通用性更强。

动态字段和常规字段相似,除了它名字中包含一个通配符外,在索引文档时,一个字段若是在常规字段中没有匹配时,将到动态字段中匹配。

假设schema中定义了一个叫*_i的动态动态字段,若是要索引一个叫 cost_i 的字段,可是 schema 中不存在 cost_i 的字段,这样 cost_i  将被索引到 *_i 字段中。

动态字段也是定义在 schema.xml 文件中,和其余字段同样,它也有个名词,字段类型,和属性。

1
<     dynamicField     name     =     "*_i"     type     =     "sint"     indexed     =     "true"     stored     =     "true"     />

建议在 schema.xml 定义一些基本的动态字段,以备扩展之用。

相关文章
相关标签/搜索