文档章节

schema.xml文件配置

java梦想家01
 java梦想家01
发布于 2015/03/30 16:15
字数 1767
阅读 425
收藏 4
点赞 0
评论 0

schema.xml是Solr一个配置文件,它包含了你的文档所有的字段,以及当文档被加入索引或查询字段时,这些字段是如何被处理的。这个文件被存储在Solr主文件夹下的conf目录下,默认的路径./solr/conf/schema.xml,也可以是Solr webapp的类加载器所能确定的路径。在下载的Solr包里,有一个schema的样例文件,用户可以从那个文件出发,来观察如何编写自己的Schema.xml。

type节点

先来看下type节点,这里面定义FieldType子节点,包括name、class、positionIncrementGap等一些参数。必选参数:

  • name:就是这个FieldType的名称。
  • class:指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。

其他可选的属性:

  • sortMissingLast,sortMissingFirst两个属性是用在可以内在使用String排序的类型上,默认false,适用于字段类型:string、boolean、sint、slong、sfloat、sdouble、pdate。
  • sortMissingLast="true",没有该field的数据排在有该field的数据之后,而不管请求时的排序规则,在Java中对应的意思就是,该字段为NULL,排在后面。
  • sortMissingFirst="true",排序规则与sortMissingLast相反。
  • positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误。

在配置中,string类型的class是solr.StrField,而这个字段是不会被分析存储的,也就是说不会被分词。

而对于文章或者长文本来说,我们必须对其进行分词才能保证搜索某些字段时能够给出正确的结果。这时我们就可以用到另外一个 class,solr.TextField。它允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器 (filter) 。

一个标准的分词:

<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" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> </analyzer> </fieldType>

分词用的依旧是fieldType,为的是在下面的field中能够用到。有两个analyzer,一个是index,一个是query,index是针对于所有,query是针对于搜索。

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

你也可以定义一个analyzer,例如使用mmseg4j进行中文分词:

<fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" /> </analyzer> </fieldType>

filed节点

filed节点用于定义数据源字段所使用的搜索类型与相关设置。含有以下属性

  • name:数据源字段名,搜索使用到。
  • type:搜索类型名例如中文ika搜索名text_ika,对应于fieldType中的name。不需要分词的字符串类型,string即可,如果需要分词,用上面配置好的分词type。
  • indexed:是否被索引,只有设置为true的字段才能进行搜索排序分片(earchable、 sortable、 facetable)。
  • stored:是否存储内容,如果不需要存储字段值,尽量设置为false以提高效率。
  • multiValued:是否为多值类型,SOLR允许配置多个数据源字段存储到一个搜索字段中。多个值必须为true,否则有可能抛出异常。
  • omitNorms:是否忽略掉Norm,可以节省内存空间,只有全文本field和need an index-time boost的field需要norm。(具体没看懂,注释里有矛盾)
  • termVectors:当设置true,会存储 term vector。当使用MoreLikeThis,用来作为相似词的field应该存储起来。
  • termPositions:存储 term vector中的地址信息,会消耗存储开销。
  • termOffsets:存储 term vector 的偏移量,会消耗存储开销。
  • default:如果没有属性需要修改,就可以用这个标识下。
  • docValues:Solr 4.2中加入了该属性
  • docValuesFormat:可选的值为Disk或者Memory

举例:

<field name="manu_exact" type="string" indexed="false" stored="false" docValues="true" />

copyField节点

如果我们的搜索需要搜索多个字段该怎么办呢?这时候,我们就可以使用copyField。代码如下:

<copyField source="name" dest="all" maxChars="30000"/> <copyField source="address" dest="all" maxChars="30000"/>

作用:

  • 将多个field的数据放在一起同时搜索,提供速度
  • 将一个field的数据拷贝到另一个,可以用2种不同的方式来建立索引

我们将所有的中文分词字段全部拷贝至all中,当我们进行全文检索是,只用搜索all字段就OK了。

其包含属性:

  • source:源field字段
  • dest:目标field字段
  • maxChars:最多拷贝多少字符

注意,这里的目标字段必须支持多值,最好不要存储,因为他只是做搜索。indexed为true,stored为false。

copyField节点和field节点都在fields节点之内。

dynamicField节点

动态字段,没有具体名称的字段,用dynamicField字段

如:name为*_i,定义它的type为int,那么在使用这个字段的时候,任务以_i结果的字段都被认为符合这个定义。如name_i、school_i

<dynamicField name="*_i" type="int" indexed="true" stored="true"/> <dynamicField name="*_s" type="string" indexed="true" stored="true"/> <dynamicField name="*_l" type="long" indexed="true" stored="true"/>

uniqueKey节点

solr必须设置一个唯一字段,常设置为id,此唯一一段有uniqueKey节点指定。

例如:

<uniqueKey>id</uniqueKey>

defaultSearchField节点

默认搜索的字段,我们已经将需要搜索的字段拷贝至all字段了,在这里设为all即可。

<defaultSearchField>all</defaultSearchField>

solrQueryParser节点

默认搜索操作符参数,及搜索短语间的逻辑,用AND增加准确率,用OR增加覆盖面,建议用AND,也可在搜索语句中定义。例如搜索“手机 苹果”,使用AND默认搜索为“手机AND苹果“。

<solrQueryParser defaultOperator="OR"/>

similarity节点

Similarity式lucene中的一个类,用来在搜索过程中对一个文档进行评分。该类可以做些修改以支持自定义的排序。在Solr4中,你可 以为每一个field配置一个不同的similarity,你也可以在schema.xml中使用DefaultSimilarityFactory类配 置一个全局的similarity。

你可以使用默认的工厂类来创建一个实例,例如:

<similarity class="solr.DefaultSimilarityFactory"/>

你也可以使用其他的工厂类,然后设置一些可选的初始化参数:

<similarity class="solr.DFRSimilarityFactory"> <str name="basicModel">P</str> <str name="afterEffect">L</str> <str name="normalization">H2</str> <float name="c">7</float> </similarity>

在Solr 4中,你可以为每一个field配置:

<fieldType name="text_ib"> <analyzer/> <similarity class="solr.IBSimilarityFactory"> <str name="distribution">SPL</str> <str name="lambda">DF</str> <str name="normalization">H2</str> </similarity> </fieldType>

上面例子中,使用了DFRSimilarityFactory和IBSimilarityFactory,这里还有一些其他的实现类。在Solr 4.2中加入了SweetSpotSimilarityFactory。其他还有:BM25SimilarityFactory、 SchemaSimilarityFactory等。

本文转载自:http://blog.javachen.com/2014/03/15/schema-in-solr/

共有 人打赏支持
java梦想家01
粉丝 11
博文 60
码字总数 14212
作品 0
海淀
MyCat配置文件说明

新手入门Mycat,首先会碰到Mycat的登录问题、创建库表问题、及如何分库分表的问题。这三个问题对应下面几个xml文件。 登录用户名配置文件server.xml 参考mycat1.5.1 源码如下: 上面配置了两...

liangxiao ⋅ 2016/10/17 ⋅ 0

heisenberg 如何配置

工作很忙,但是邮件,qq等来咨询的人比较多,所以在这里再发一个阉割后生产的配置供大家参考 首先核心配置就三个文件server.xml,schema.xml,rule.xml,还有hsb.properties,用于对应用服务器配...

brucexx ⋅ 2014/11/18 ⋅ 1

Solr学习总结(五)SolrNet的基本用法及CURD

  上一篇已经讲到了Solr 查询的相关的参数。这里在讲讲C#是如何通过客户端请求和接受solr服务器的数据, 这里推荐使用SolrNet,主要是:SolrNet使用非常方便,而且用户众多,一直都在更新,...

章为忠 ⋅ 2015/12/24 ⋅ 0

Nutch+solr+mmseg4j集成

第一章 安装配置solr4.2 #下载solr4.2.0版本 [root@nutch nutch2]# wget http://archive.apache.org/dist/lucene/solr/4.2.0/solr-4.2.0.tgz #解压solr4.2.0文件 [root@nutch nutch2]# tar -......

hiqj ⋅ 2014/04/18 ⋅ 0

solr5.4 配置ik分词器

说明:只针对solr5.4 安装请参见这里 IK分词非常好用,网上很多通用的配置,这里主要讲解如何配置自己的扩展词典。 这里整理了一份配置与相关文件,放在了git上可以去直接下载。 https://gi...

GarenBean ⋅ 2016/07/05 ⋅ 0

Mycat读写分离笔记Windows

Mycat读写分离笔记Windows 自己搭了一个运用Mycat中间件搭建了一个读写分离的demo,昨晚还在奋战当中,因为连接mycat的时候老是报错:No Mycat DataBases selected.尝试了很多的方法,然后还...

推荐码发放 ⋅ 04/29 ⋅ 0

(solr系列:二)如何在solr中添加一个core

在上一篇博文中已经介绍了如何在tomcat中部署solr,部署完之后solr默认是有一个core的,也就是collection1,如下图: 如果想自定义一个core,该如何做呢? 本文将承接上一篇博文(http://simp...

科技小能手 ⋅ 2017/11/12 ⋅ 0

安装nutch2+Hbase+Slor4

介绍 Nutch 网络爬虫 Hbase 分布式存储系统 Solr搜索服务器 版本说明 由于NutchHbaseSolr他们都各自做在自己的版本修改,所以配置他们三者有不同的方法.这里也是参考网络文档做了他们最新版本...

tngou ⋅ 2013/08/15 ⋅ 2

SOLR4.2+NUTCH1.6

1、SOLR4.2集成NUTCH1.6 wget http://archive.apache.org/dist/lucene/solr/4.2.0/solr-4.2.0.tgz tar -xzvf solr-4.2.0.tgz cd solr-4.2.0/example 复制nutch的conf目录中的schema-solr4.xm......

杨尚川 ⋅ 2015/04/08 ⋅ 5

ansj和solr集成问题

@ansj 你好,想跟你请教个问题:ansj和solr集成过程中需要配置schema.xml文件吗?如果需要改如何配置。谢谢。

johnchou ⋅ 2012/12/14 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 45分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部