solor的字段属性+复制域字段+动态域字段

schema.xml中配置的是索引库 域字段和域字段的类型

1)

字段属性:

<field name="id" type="string" indexed="true" stored="true" required="true" />

    indexed: 如果字段需要被索引(用于搜索或排序),属性值设置为true,为false该字段就是有值也不能被检索到
    stored: 如果字段内容需要被返回显示,值设置为true;为falses时 字段还是能被分词后存成索引,但该字段完整的值并没被保存

就是搜素匹配成功,也没法展示该字段的值。

    multiValued: 如果这个字段在每个文档中可能包含多个值,设置为true

定义复制域字段的时候,设置

 <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/> 

  <copyField source="t" dest="ta" />    

  1.     <copyField source="a" dest="ta" />

     required:为true 该字段必须有值 不能为空,否则会抛异常
    default: 
在增加文档时,可以根据需要为字段设置一个默认值,防止为空


2).复制域字段

其实说的简单一点,比如现在你要查询包涵"Java"的博客, 那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,where tittle like '%Java%'  or  content like '%Java%'.   这个时候copyField就派上用场了, 定义一个新字段,将title和content 复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目地了。  这便是copyField的典型应用场景  。注意:如果dest由多个source构成,就需要将其指定为multiValued。
在网上找了一个例子:
[html]  view plain  copy
  1. <schema name="eshequn.post.db_post.0" version="1.1"    
  2.     xmlns:xi="http://www.w3.org/2001/XInclude">    
  3.      <fields>    
  4.         <!-- for title -->    
  5.         <field name="t" type="text" indexed="true" stored="false" />    
  6.         <!-- for abstract -->    
  7.         <field name="a" type="text" indexed="true" stored="false" />    
  8.         <!-- for title and abstract -->    
  9.         <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>    
  10.     </fields>    
  11.     <copyField source="t" dest="ta" />    
  12.     <copyField source="a" dest="ta" />    
  13. </schema>    

maxChars 参数,用于限制复制的字符数。

<copyFieldsource="*_t"dest="text"maxChars="25000"/>

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

<copyFieldsource="*_t"dest="text"maxChars="25000"/>

3).动态域字段dynamicField

不管分词存储还检索的时候,输入的字段先去常规字段中匹配,如果没有匹配到就来匹配动态字段,

例如mydata_i 或者youdata_i的数据都会存储到*_i动态字段中(把它当做 一个字段),检索的时候,如果_i结尾且常规没匹配到就从*_i字段(看做一个字段)匹配

动态字段(Dynamic fields)允许 solr 索引没有在 schema 中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。
动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。
假设schema中定义了一个叫*_i的动态动态字段,如果要索引一个叫 cost_i 的字段,但是 schema 中不存在 cost_i 的字段,这样 cost_i  将被索引到 *_i 字段中。
动态字段也是定义在 schema.xml 文件中,和其他字段一样,它也有个名词,字段类型,和属性
< dynamicField name = "*_i" type = "sint" indexed = "true" stored = "true" />

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值