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的博客)


Solr 配置文件之schema.xml的更多相关文章

  1. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

  2. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)

         5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...

  3. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)

    自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...

  4. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(1)

    刚学Solr(版本6.7.0),新建一个core时,提示要求schema.xml文件,我找了半天也没在源码包中找到名为schema.xml的文件.这个版本其实用的是managed-schema文件,没 ...

  5. solr中的schema.xml(managed-schema)文件解读

    solr 7.2.1版本managed-schema文件示例 <uniqueKey>id</uniqueKey> 唯一键字段,solr对每一个文档都赋予一个唯一标识符字段,避免 ...

  6. 我与solr(五)--关于schema.xml中的相关配置的详解

    先把文件的代码贴上来: <?xml version="1.0" encoding="UTF-8" ?> <!-- 版权说明... --> ...

  7. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(2)

    接上篇    2. <dynamicField> 为满足前辍或后辍的一些字段提供统一的定义.如<dynamicField name="*_s" index=&qu ...

  8. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - Analyzer, tokenizer(4)

    有些时候,我们需要自定义 fieldType.下面的例子就是自定义的 fieldType,<analyzer type="index"> 表示索引时怎么处理,<a ...

  9. Solr的学习使用之(二)schema.xml等配置文件的解析

    上一篇文章已经讲解了如何部署Solr,部署是部署完了,可是总觉得心里空空的,没底,里面有N多配置文件,比如schema.xml.solrConfig.xml.solr.xml and so on……都 ...

随机推荐

  1. Git的优点

    没有网络时也可以使用版本控制系统,这点svn做不到,如果你一直有网络,这个可以忽略: git由于所有版本都在本地的.git目录数据库中,因此它可以用指针随时改变指向,指向不同的版本,把它作为最新的he ...

  2. 转 Android_开源框架_AndroidUniversalImageLoader网络图片加载

    转自:http://www.cnblogs.com/wanqieddy/p/3836485.html 1.功能概要 Android-Universal-Image-Loader是一个开源的UI组件程序 ...

  3. foj Problem 2282 Wand

     Problem 2282 Wand Accept: 432    Submit: 1537Time Limit: 1000 mSec    Memory Limit : 262144 KB Prob ...

  4. 安装ubuntu配置ssh

    vmware安装ubuntu后,必须配置网卡,重新设置MAC,否则无法连接网络(具体方法百度)NAT直连模式xshell连接时host为ifconfig显示的IP地址,不需要设置端口转发,端口还是22 ...

  5. UVALIVE 2431 Binary Stirling Numbers

    转自别人的博客.这里记录一下 这题是定义如下的一个数: S(0, 0) = 1; S(n, 0) = 0 for n > 0;S(0, m) = 0 for m > 0; S(n, m) ...

  6. 【转】Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

    原文链接:http://dblab.xmu.edu.cn/blog/install-hadoop/ 当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛.尽管安装其实很简单, ...

  7. windows 修改xhsell安全加密配置

    由于xhsell旧版的与新版的有差别,导致新版的不能用旧版的xsh文件 1.将xshell升级到最新版本2.安装sed与grep到C:\Program Files (x86)\GnuWin323.将b ...

  8. windows 中使用hbase 异常:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

    平时一般是在windows环境下进行开发,在windows 环境下操作hbase可能会出现异常(java.io.IOException: Could not locate executable nul ...

  9. jmeter 多机负载压测与服务器性能监测

    环境: jmeter: apache-jmeter-3.3 jdk: 负载生成: 被测机: 一. 多机负载压测: 概述: 1.修改jmeter.properties配置文件 remote_hosts= ...

  10. 为什么32位系统最大支持4G内存??我自己悟出来了 终于 。。。。。

    今天突然开窍了,想通了..... 以下是我的抽象想法: 32位系统 这个 多少位 指的是 硬件的 一次性发送过来的位数,一个字节 等于8位,内存的一个存储单元就是一个字节,即8位. 也可以这样来想这个 ...