设为首页 收藏本站
查看: 940|回复: 0

[经验分享] Solr之Schema.xml配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-10 17:11:16 | 显示全部楼层 |阅读模式

在 Solr 中,使用一个或多个 Document 来构建索引。Document 包括一个或多个 Field。Field 包括名称、内容以及告诉 Solr 如何处理内容的元数据。

例如,Field 可以包含字符串、数字、布尔值或者日期,也可以包含你想添加的任何类型,只需用在solr的配置文件中进行相应的配置即可。Field 可以使用大量的选项来描述,这些选项告诉 Solr 在索引和搜索期间如何处理内容。

下面来挨个详细介绍下这些属性的含义。

1、模式配置Schema.xml
schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\example\solr\collection1\conf中找到,也可以在我们上篇讲到的solrhome\mycore\conf中找到,它就是solr模式关联的文件。打开这个配置文件,你会发现有详细的注释。

模式组织主要分为三个重要配置。

2、types 部分

fieldType 是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等.

<fieldType name="string" class="solr.StrField" sortMissingLast="true"/><fieldType name="boolean" class="solr.BoolField" 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.StopFilterFactory" 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 class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>1234567891011121314151617181920212223242526272829303112345678910111213141516171819202122232425262728293031

参数说明:

属性描述
name标识而已
class和其他属性决定了这个fieldType的实际行为。
sortMissingLast设置成true没有该field的数据排在有该field的数据之后,而不管请求时的排序规则, 默认是设置成false。
sortMissingFirst跟上面倒过来呗。 默认是设置成false
analyzer字段类型指定的分词器
type当前分词用用于的操作,index代表生成索引时使用的分词器,query代表在查询时使用的分词器
tokenizer分词器类
filter分词后应用的过滤器 过滤器调用顺序和配置相同.
words=”stopwords.txt”用来配置停止词的,stopwords.txt一般与schema.xml在同一个目录,什么叫停止词呢,比如’在’、’的’、’了’等等这类在搜索时没有实际意义的字词,我们在分词的时候会忽略掉这些。
synonyms=”synonyms.txt”是用来配置同义词的,比如搜索’裙子’、’群’,都会搜出裙子相关产品,搜’袜’,’袜子’就会搜出袜子相关产品大致就是这个意思了。

3、fileds 部分

filed是你添加到索引文件中出现的属性名称,也就是前文介绍的,select后面跟着的字段名,而声明类型就需要用到上面的types

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/><field name="path" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true" /><field name="content" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true"/><field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/><field name ="pinyin" type ="text_pinyin" indexed ="true" stored ="false" multiValued ="false"/><field name="_version_" type="long" indexed="true" stored="true"/><dynamicField name="*_i" type="int" indexed="true" stored="true"/><dynamicField name="*_l" type="long" indexed="true" stored="true"/><dynamicField name="*_s" type="string" indexed="true" stored="true" /><copyField source="content" dest="pinyin"/><copyField source="content" dest="text"/><copyField source="pinyin" dest="text"/>12345678910111213141516171819202122231234567891011121314151617181920212223属性描述
field固定的字段设置
dynamicField动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段.
copyField一般用于检索时用的字段这样就只对这一个字段进行索引分词就行了copyField的dest字段如果有多个source一定要设置multiValued=true,否则会报错的

copyField就引出了solr的一个全文检索的概念,如果我要实现一个搜索,而我要搜索的属性有很多个那么应该使用如下配置方法:

<!--  关键字搜索  --><field name="keyword" type="text_general" indexed="true" stored="false" multiValued="true"/><copyField source="seoTitle" dest="keyword"/><copyField source="title" dest="keyword"/><copyField source="subTitle" dest="keyword"/><copyField source="shopName" dest="keyword"/><copyField source="seoKeywords" dest="keyword"/><copyField source="category_name_*" dest="keyword"/><copyField source="descriptionForSearch" dest="keyword"/>123456789123456789

此时keyword的值就相当于包含了seoTitle、title、subTitle、shopName、seoKeywords、category_name_*、descriptionForSearch的所有内容。

另外这里大家一定会好奇,keyword使用的type=”text_general”会达到什么效果,其实很简单,text_general是我在上面定义的分词器,能够根据一定的格式分词,利于搜索,如果不实用text_general,那么就达不到全文检索,模糊搜索的目的了。

字段属性说明:

属性描述
name字段类型名
classjava类名
indexed缺省true。 说明这个数据应被搜索和排序,如果数据没有indexed,则stored应是true。
stored缺省true。说明这个字段被包含在搜索结果中是合适的。如果数据没有stored,则indexed应是true。
omitNorms字段的长度不影响得分和在索引时不做boost时,设置它为true,一般文本字段不设置为true。
termVectors如果字段被用来做more like this 和highlight的特性时应设置为true。
compressed字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只有StrField和TextField是可以压缩,这通常适合字段的长度超过200个字符。
multiValued字段多于一个值的时候,可设置为true。
positionIncrementGap和multiValued一起使用,设置多个值之间的虚拟空白的数量

注意:_version_ 是一个特殊字段,不能删除,是记录当前索引版本号的.

4、其他配置

uniqueKey:唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复的。在更新、删除的时候可以用到。

defaultSearchField:默认搜索属性,如q=solr就是默认的搜索那个字段

solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-340338-1-1.html 上篇帖子: solr分词以及搜索 下篇帖子: solr定时更新索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表