zoukankan      html  css  js  c++  java
  • 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的博客)


  • 相关阅读:
    Oracle 游标
    对"com1"的访问被拒绝
    几种不伤身体的速效减肥秘方 生活至上,美容至尚!
    护肤必备,教你如何护理肌肤 生活至上,美容至尚!
    九种食物摆脱便秘烦恼 生活至上,美容至尚!
    1个多月就能看到效果的减肥大法 生活至上,美容至尚!
    防晒涂抹四大要领,让你远离日晒痛苦 生活至上,美容至尚!
    晚间保养四部曲 轻松护肤有妙招 生活至上,美容至尚!
    夏日驱蚊虫蟑螂的最好办法! 生活至上,美容至尚!
    睡前一分钟打造完美下半身 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6959234.html
Copyright © 2011-2022 走看看