上一篇文章已经讲解了如何部署Solr,部署是部署完了,可是总觉得心里空空的,没底,里面有N多配置文件,比如schema.xml、solrConfig.xml、solr.xml and so on……都不知道他们是来干嘛的,所以要先了解下整体的项目架构、基本原理,才能在后续的工作中,更加熟练,须知挨踢行业,必须求甚解。以前不管是上学,还是做其他事情,都是在没有了解其原理的基础上就开工,导致了似懂非懂的一种状态,这种情况就是在现有的范围、环境下可以应付得来,但是如果环境一变,那就束手无策了。正所谓磨刀不误砍柴工,所以,必须了解下基本原理,才能更好的在路上。

  以下是一些Solr的项目结构、配置文件的讲解:

作者讲解了Solr Core、schema.xml、solrConfig.xml文件的含义,以MySql来做对比,这样更加通俗易懂,比如solr的core就相当于数据库,schema.xml相当于表等等

http://www.ecmkit.com/zh-hans/taxonomy/term/287

  1. schema.xml

schema.xml的结构比较简单,主要分为2 部分types和fields。types部分定义了字段类型的定义信息,比如int,string等;而在fields部分则定义了Solr将会存储哪些信息,fields内的字段是根据你的业务需求来定义的。types和fields的关系其实也很明显,就是types被fields所引用。举例来说,fields内定义了,该字段的类型是string,而string类型的定义就是在types中定义的。

  • types

我们知道<types>内定义了一些数据类型,这些数据类型会被<fields>引用。就先来看一个常见的定义:<fieldType name="int" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>。很明显这是一个数值类型的定义,在solr中,数值类型包括int, float, long, double以及日期类型(date),而对于这些数值类型,基本上都是用Trie开始的类型,例如"solr.TrieFloatField","solr.TrieDateField"等。Trie开始的类型能满足你至少95%以上的需求,因此除非有特殊理由,不然还是老老实实用Trie开始的类型吧。

  • fieldType
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter/>
      </analyzer>
</fieldType>

首先应该注意到有2个analyzer。一个是index,另外一个是query。也就是说<analyzer type="index">是用在index阶段,而<analyzer type="query">用在查询阶段—你所输入的查询内容也是需要通过分析最终产生token,然后和index里的token匹配。

<tokenizer class="solr.StandardTokenizerFactory"/>当然就是对应分析链中的起点Tokenizer。接下来串联了2个filter,分别是solr.StopFilterFactorysolr.LowerCaseFilterFactory。stop word filter就是把那些the, of, on之类的词从token中去除掉,由于这类词在文档中出现的频率非常高,而对文档的特征又没什么影响,所以这类词对查询没什么意义。Lower case filter的作用是将所有的token转换成小写,也就是在最终的index中保存的都是小写。

以下还有一篇关于schema.xml文件配置的详细解释,赞一个:

http://blog.csdn.net/liuweitoo/article/details/8137124

  在路上……

  

Solr的学习使用之(二)schema.xml等配置文件的解析的更多相关文章

  1. SOLR企业搜索平台 三 (schema.xml配置和solrj的使用)

    标签:solrj 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://3961409.blog.51cto.com/3951409/8 ...

  2. MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

    在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...

  3. Spring学习笔记之二----基于XML的Spring AOP配置

    在Spring配置文件中,通常使用<aop:config>元素来设置AOP,其中应包括: <aop:aspect>指定aspect,aspect是一个POJO类,包含了很多的a ...

  4. Maven学习归纳(二)——几个常用命令解析

    Maven的常用命令 第一次执行命令的时候,因为需要下载执行命令的基础环境,所以会从远程仓库下载该环境到本地仓库中 运行mvn命令,必须在pom.xml文件所在的目录 一. JavaProject的p ...

  5. MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置

    文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...

  6. 数据库中间件DBLE学习(二) 学习配置schema.xml

    前言 一边有一个经常引诱我让我"娱乐至死"的视频,还有一个不停"鞭策"我让我快点学习的大BOSS.正是有这两种极端的爱才让我常常在自信中明白自己努力的方向.嗯, ...

  7. 利用SOLR搭建企业搜索平台 之——模式配置Schema.xml

    来源:http://blog.csdn.net/awj3584/article/details/16963525 schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\ex ...

  8. Solr 配置文件之schema.xml

    schema.xml这个配置文件的根本目的是为了通过配置告诉Solr怎样建立索引. solr的数据结构例如以下: document:一个文档.一条记录 field:域.属性 solr通过搜索某个或某些 ...

  9. solr 6.0 没有schema.xml未自动创建schema文件

    solr 6.0 没有schema.xml未自动创建schema文件 摘要:在之前的Solr版本中(Solr5之前),在创建core的时候,Solr会自动创建好schema.xml,但是在之后的版本中 ...

随机推荐

  1. pandas 新增数据列(直接赋值、apply,assign、分条件赋值)

    # pandas新增数据列(直接赋值.apply.assign.分条件赋值) # pandas在进行数据分析时,经常需要按照一定条件创建新的数据列,然后进行进一步分析 # 1 直接赋值 # 2 df. ...

  2. python学习笔记(八)函数return多个值,列表推导式和交换两个变量的值

    函数return多个值: 补充知识点:写代码得到时候少用全局变量: 1.不安全 2.会一直占着内存不释放 函数多个return值,那么会把这几个return的值都放在一个元组里面,然后返回 def h ...

  3. redis学习一 String数据类型

    一:概述 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的 ...

  4. Python3解leetcode N-ary Tree Level Order Traversal

    问题描述: Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to ...

  5. select自定义箭头问题 。。。和一行内不同颜色的整体鼠标滑过变色

    1.select自定义箭头问题 用<select><option></option></select>的时候自带的三角箭头与需要的三角不同,这是还要求有 ...

  6. 【CF1243B1】Character Swap (Easy Version)【思维】

    题意:给你两个字符串,问是否存在交换方案使得两个字符串变成一样的,方案为只交换一次且只交换s1与s2里的一个字符 题解:若一开始就相同,则存在交换方案 若一开始不同的位置为1个或大于2个,则不存在方案 ...

  7. JavaScript点击事件——美女合集

    Js点击事件--美女合集 实例 效果如下图: 代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  8. activity_main.xml 添加自己画的view 组件

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  9. Emmet基本使用教程

    转载来自:http://www.iteye.com/news/27580 Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语 ...

  10. ICMP(Internet Control Message Protocol)网际控制报文协议初识

    ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...