搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)

上篇文章中,阿堂使用实例demo全方位演示了solrj+IKAnalyzer如何来索引、分词、查询数据表中的字段中的相关内容。其中分使用到schema.xml中定义的很多字段定义,可能有些网友对其中的一些属性和字段不是特别熟悉,所以阿堂就讲解一下其中的一些基础和关键的属性及字段。

   首先弄清楚几个概念:

Document:Solr的信息的基本单位的是Document,它是一组描述某些事物的数据集合。

Field:Document的主要构成单元,是更具体的信息描述。

    其实大家可以这样理解,Document对应于我们Java代码中的一个类,而Field,则是类中的一个属性。


FieldAnalysis:就是solr如何对传进来的数据进行处理,如果构建索引。假设有个个人简介的Field,他里面包括了很多单词,我们需要在构建索引完之后,通过检索某个单词就能查询到这个人,那么我们就需要对每个单词都进行索引,但是,一句话有很多语气助词,如果aan  or and not,这些词我们又不需要为他们建索引,在构建索相的时候,需要排除出去。那么那些单词我们要建索引,那些又不需要列,这个分析出过程,我们就称为:fieldAnalysis.


Field Type:告诉solr如何去处理某个field的数据,以及这个Field在查询的时候处理。

一个Field Type包括如下四部分信息:

  • 名字,name
  • 实现类名,也就是solr中真正的类型的类名。
  • 如果FieldType 是 TextFiled类型,即还有analysis属性
  • 属性
---------------------------------------

  大致清楚以上概念以后,我们再来继续往下看。  那么这些东西在那里定义的列,答案是在你的核心的schema.xml中。如我们例子是在:${solr_home}/collection1/schema.xml


    我们上面所说的Field Type  则对应于schemea.xml中的下面的,solr中的fieldType类型有很多,而常用的有如下几个:
  • IntField
  • LongField
  • StrField
  • TextField
  • DateField

接下来说说结点的几个常用属性:

  • indexed   是否为该 field建索引
  • stored   是否存储该field的值,存储以后,可以获取到值,否则会获取到Null
  • multiValued  是否是多值

关于这些属性,什么时候有什么用途,给出一个二维矩阵图:

 

搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)


上面一节我们学习一下FieldType。 其实你可以想的简单一点,FieldType就好像是我们在Java中自定义型。


Field:

  Field就是一个字段,定义一个Field很简单:

 

搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)


基本上属性也和FieldType类似,他的属性会覆盖掉FieldType的同名属性。


CopyField

     

你可能想让document的一些字段可以多次使用。solr有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段,以下是个例子:
  搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)

上例中,如果text字段有数据的话,cat字段的内容将被添加到text字段中。maxChars参数,一个int类型参数,用于限制复制的字符数。

source和destination都支持通配符。以下是一个将所有以 _t 结尾的字段全部复制到text字段中。
  搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)

 
   其实说的简单一点,比如现在你要查询包涵"Java"的博客,那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,wheretittle like '%Java%'  or  contentlike '%Java%'.  这个时候copyField就派上用场了,定义一个新字段,将title和content复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目地了。 这便是copyField的典型应用场景 。注意:如果dest由多个source构成,就需要将其指定为multiValued。
如 
 
搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)

DynamicField:
   
动态字段(Dynamic fields)允许 solr 索引没有在 schema中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。
动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。
假设schema中定义了一个叫*_i的动态动态字段,如果要索引一个叫 cost_i 的字段,但是 schema 中不存在 cost_i的字段,这样 cost_i   将被索引到 *_i 字段中。
动态字段也是定义在 schema.xml 文件中,和其他字段一样,它也有个名词,字段类型,和属性。
搜索引擎之阿堂Solr学习笔记系列5(进阶篇:schema.xml的属性介绍)

建议在 schema.xml 定义一些基本的动态字段,以备扩展之用
 
如下是如何选择合适类型的常见和策略
 

     返回合适的结果类型,能让client端的程序员更爽,更顺心。比如,要返回一商品的价格,你如果返回一个text,显然没有返回float好。

本节我们主要就来学习一下一些常用场景用那些类型。


一、Numeric Types数字类型

   对于一般的需要,推荐数据类型采用:SortableIntField, SortableLongField,SortableFloatField, SortableDoubleField。这些类型是按值排序的,这是他们比IntField,LongField, FloatField, DoubleField更优越的地方。

   假设你的用户会频繁的在数值类型上执行范围查询,建议采用:TrieField.


二、Text类型(文本类型)

    关于Text类型的一个妙用,就是使用copyField,将所有要检索的字段包含进来,因为大多数用户搜索的时候,他只知道输入搜索内容,至于是什么属性,他是没有什么概念的。而且大多数的搜索都是检索某个关键字,因此采用这种办法,就能很好的解决这些情况。


   另外,还有一个常用办法就是将copyField将一个字段拷贝多份,分别用于不同的用途。比如一本书,有很多作者,我们通常有,根据作者查询书,作者排序 等需求,这个时候就可以采用这种办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值