solr中field,copyField,dynamicField的区别

schema.xml

<?xml version="1.0" ?>
<schema name="testcore" version="1.5">
  <types>
    <fieldtype name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <!-- 原始 ik分词器 -->    
    <fieldType name="text_ik" class="solr.TextField">         
         <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>        
         <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>    
  </types>

 <fields>   
  <!-- 业务字段 -->  
  <field name="id"          type="string"   indexed="true"  stored="true"  multiValued="false" /> 
  <field name="sname"       type="string"   indexed="true"  stored="true"  multiValued="false" /> 
  <field name="slocation"   type="string"   indexed="true"  stored="true"  multiValued="false" /> 
  <field name="sdes"        type="text_ik"  indexed="true"  stored="true"  multiValued="false" /> 
  <field name="sarea"       type="string"   indexed="true"  stored="true"  multiValued="false" />
  <field name="spopulation" type="long"     indexed="true"  stored="true"  multiValued="false" />  
  <!-- 多值字段 -->
  <field name="smemo" type="text_ik" indexed="true" stored="true" multiValued="true" />
  <!-- 拷贝字段 source和dest都支持通配符 -->
  <copyField source="sname" dest="smemo" />
  <copyField source="sarea" dest="smemo" />

  <!-- 动态字段 -->
  <dynamicField  name="exts_l_*" type="long"  indexed="true" stored="true" multiValued="false" />
  <dynamicField  name="exts_s_*" type="string"  indexed="true" stored="true" multiValued="false" />
  <dynamicField  name="exts_t_*" type="text_ik" indexed="true" stored="true" multiValued="false" />
  <field name="exts" type="text_ik" indexed="true" stored="true" multiValued="true"/>
  <copyField source="exts_l_*" dest="exts"/>  
  <copyField source="exts_s_*" dest="exts"/>
  <copyField source="exts_t_*" dest="exts"/>

  <!-- general -->   
  <field name="name"       type="string"   indexed="true"  stored="true"  multiValued="false" /> 
  <field name="type"       type="string"   indexed="true"  stored="true"  multiValued="false" />
  <field name="_version_"  type="long"     indexed="true"  stored="true"/>
 </fields> 

 <!-- field to use to determine and enforce document uniqueness. -->
 <uniqueKey>id</uniqueKey>

 <!-- field for the QueryParser to use when an explicit fieldname is absent -->
 <defaultSearchField>name</defaultSearchField>

 <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
 <solrQueryParser defaultOperator="OR"/>
</schema>

上面schema.xml定义了:

  1. 将field字段sname,sarea拷贝到多值字段smemo中
  2. 将dynamicField字段exts_l_*,exts_s_*,exts_l_*拷贝到多值字段exts中

field

  1. 有明确定义的普通字段

dynamicField

  1. 不确定属性名字的字段

copyField

  1. 可以将field字段拷贝到其他字段
  2. 可以将dynamicField字段拷贝到其他字段
  3. 可以将多个field字段拷贝到多值字段
  4. 可以将多个dynamicField字段拷贝到多值字段

插入文档

{
"id":"100",
"sname":"西班牙",
"sarea":"欧洲",
"slocation":"欧洲", 
"exts_l_l":10000,
"exts_s_s":"皇家马德里",
"exts_t_t":"巴萨罗那"
}

查询文档

{
  "responseHeader": {
    "status": 0,
    "QTime": 36
  },
  "response": {
    "numFound": 1,
    "start": 0,
    "maxScore": 1.9162908,
    "docs": [
      {
        "id": "100",
        "sname": "西班牙",
        "smemo": [
          "西班牙",
          "欧洲"
        ],
        "sarea": "欧洲",
        "slocation": "欧洲",
        "exts_l_l": 10000,
        "exts": [
          "10000",
          "皇家马德里",
          "巴萨罗那"
        ],
        "exts_s_s": "皇家马德里",
        "exts_t_t": "巴萨罗那",
        "_version_": 1658402136111710200
      }
    ]
  }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值