Solr 配置文件之schema.xml


schema.xml這個配置文件的根本目的是為了通過配置告訴Solr怎樣建立索引。

solr的數據結構例如以下:
  • document:一個文檔、一條記錄
    • field:域、屬性
solr通過搜索某個或某些field,返回若干個符合條件的document,或者按搜索的score排序返回。
假設跟數據庫對照,document相當於數據庫的表。field相當於表中的字段。而schema.xml就是為了定義一個表的結構(定義各個field的名字、類型、約束、等等)。

schema.xml的基本結構例如以下:
<schema>
    <types>
    <fields>
    <uniqueKey>
    <copyField>
</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

一個簡單的樣例:
<?xml version="1.0" encoding="UTF-8" ?

> <schema name="course_video" version="1.5"> <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="tags" type="string" indexed="true" stored="false" required="false" multiValued="false" /> <field name="content" type="string" indexed="true" stored="true" required="false" multiValued="false" /> <field name="info_text" type="text_general" indexed="true" stored="false" multiValued="true" /> <copyField source="title" dest="info_text" /> <copyField source="content" dest="info_text" /> <copyField source="tags" dest="info_text" /> <uniqueKey>id</uniqueKey> <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> </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信息:

(原創文章,轉載請注明轉自Clement-Xu的博客)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM