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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章