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

 

一个简单的例子:

 
  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值