Solr 配置文件之schema.xml

schema.xml這個配置文件的根本目的是爲了經過配置告訴Solr如何創建索引。數據庫

 

solr的數據結構以下:apache

  • document:一個文檔、一條記錄
    • field:域、屬性

solr經過搜索某個或某些field,返回若干個符合條件的document,或者按搜索的score排序返回。json

若是跟數據庫對比,document至關於數據庫的表,field至關於表中的字段。而schema.xml就是爲了定義一個表的結構(定義各個field的名字、類型、約束、等等)。api

 

schema.xml的基本結構以下:數據結構

<schema>ide

    <types>ui

    <fields>.net

    <uniqueKey>code

    <copyField>xml

</schema>

 

經常使用的配置說明:

  • field:定義一個document中的各個fields
    • name:必填。該field的名字。先後都有下劃線的name是系統保留的名字,好比「_version_」
    • type:必填。類型,對應於fieldType的name
    • default:該field的缺省值
    • indexed:true/false,是否爲該field創建索引,以讓用戶能夠搜索它、統計它(facet)
    • stored:true/false,定義這個field是否能夠返回給查詢者
    • multiValued:true/false,是否能夠容納多個值(好比多個copyField的dest指向它)。若是是true,則該field不能被排序、不能做爲uniqueKey
    • required:true/false,告訴solr這個field是否接受空值,缺省爲false
    • docValues:true/false,創建document-to-value索引,以提升某些特殊搜索的效率(排序、統計、高亮)
  • copyField:把一個field的內容拷貝到另一個field中。通常用來把幾個不一樣的field copy到同一個field中,以方便只對一個field進行搜索
    • source:被拷貝的field,支持用通配符指定多個field,好比:*_name
    • dest:拷貝到的目的field
    • maxChars:最大字符數
  • uniqueKey:指定一個field爲惟一索引
  • fieldType:定義field的類型,包括下面一些屬性
    • name:必填,被field配置使用
    • class:必填,filedType的實現類。solr.TextField是路徑縮寫,"等價於"org.apache.solr.schema.TextField"
    • multiValued:?
    • positionIncrementGap:指定mutiValued的距離
    • ananlyzer:若是class是solr.TextField,這個配置是必填的。告訴solr如何處理某些單詞、如何分詞,好比要不要去掉「a」,要不要所有變成小寫……
      • type:index或query
      • tokenizer:分詞器,好比:StandardTokenizerFactory
      • filter:過濾器,好比:LowerCaseFilterFactory
  • dynamicField:用通配符定義一個field來存在沒有被field定義的漏網之魚
    • name:使用通配符,好比「*_i」,來處理相似「cost_i」之類的field

 

一個簡單的例子:

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2.  
  3. <schema name="course_video" version="1.5">

  4. <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />

  5.  
  6. <field name="_version_" type="long" indexed="true" stored="true"/>

  7.  
  8. <field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  9. <field name="tags" type="string" indexed="true" stored="false" required="false" multiValued="false" />

  10. <field name="content" type="string" indexed="true" stored="true" required="false" multiValued="false" />

  11.  
  12. <field name="info_text" type="text_general" indexed="true" stored="false" multiValued="true" />

  13.  
  14. <copyField source="title" dest="info_text" />

  15. <copyField source="content" dest="info_text" />

  16. <copyField source="tags" dest="info_text" />

  17.  
  18. <uniqueKey>id</uniqueKey>

  19.  
  20. <fieldType name="string" class="solr.StrField" sortMissingLast="true" />

  21. <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>

  22.  
  23. <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

  24. <analyzer type="index">

  25. <tokenizer class="solr.StandardTokenizerFactory"/>

  26. <filter class="solr.LowerCaseFilterFactory"/>

  27. </analyzer>

  28.  
  29. <analyzer type="query">

  30. <tokenizer class="solr.StandardTokenizerFactory"/>

  31. <filter class="solr.LowerCaseFilterFactory"/>

  32. </analyzer>

  33. </fieldType>

  34.  
  35. </schema>

 

注:solrconfig.xml配置文件中,requestHandler "/select"的缺省「df」是「text」。若是按照上面的配置,咱們想要的缺省搜索info_text,因此須要在solrconfig.xml中修改:

  <requestHandler name="/select" class="solr.SearchHandler">

     <lst name="defaults"> 

       <str name="echoParams">explicit</str>

       <int name="rows">10</int>

       <str name="defType">edismax</str>

       <str name="df">info_text</str>

     </lst>

    </requestHandler>



能夠經過http api獲取schema信息:

http://<ip>:8983/solr/<collection>/schema?wt=json

http://<ip>:8983/solr/<collection>/schema/fields?wt=json

http://<ip>:8983/solr/<collection>/schema/dynamicfields?wt=json

http://<ip>:8983/solr/<collection>/schema/copyfields?wt=json

相關文章
相關標籤/搜索