solr的使用(一)

目录

配置solr服务和需要的知识

配置要存储的字段属性、名称

        (1)首先建“表”

        (2)定义字段属性


配置solr服务和需要的知识

        这里我就不多介绍了,网上有很多教程,官网也有。自己去找下资料就可以了,网上千篇一律的,本文章主要介绍solr的语法使用。本教程会用到许多跟关系型数据库互相联想的方式,可以方便那些只用过主流数据库mysql、oracle的人理解,这也是我个人的见解。因为我也是只学过这些主流数据库,而没有使用过no sql类型的数据库,我的联想可能不太准确,各有各的见解,如果你觉得有用的话,当然最好啦。本教程侧重于应用,理论方面就不多说,官网都很多的。那废话不多说,开始我们的solr之旅吧。

        学习本solr需要以下这些知识和配置:

        (1)当然提到solr,中文分词器是必不可上的,在配置的时候记得配上text_ik。

        (2)新建一个document,这个document用来存储你要存储的数据,就好像你操作数据库的时候需要对应的库一样,这个相当于库,这里面可以放你的表数据。

        

        (3)需要学习spring-data,尤其spring-data-jpa,如果需要发掘更深一步的solr操作,这个一定需要掌握。 

  • 配置要存储的字段属性、名称

        本配置相当于配置数据库中的域名和域名属性,其实solr也叫域,那么我们跟操作关系型数据库一样,就需要了解如何建表和和表字段了,当然还需要字段有哪些属性可以配置,这些属性对应有哪些值和不进行配置的时候默认值是什么。

        (1)首先建“表”

        其实在我们创建document的时候相应的就已经创建了对应的表了,我们只需要找到solr文件下的 managed-schema.XML,solr利用xml文件将字段注入到其对应的库中,所以只要在这个文件进行配置就可以了。这是手动的配法,当然如果你有安装schedule api可以直接可视化配置。

        (2)定义字段属性

       <1>如何配置,以什么形式配置?

        在xml配置对应的bean注入到库中。

       <2>配置一个基础的bean,需要有什么属性

        配置<field/>标签:

        <field name="roomId" type="string" indexed="true" stored="true"/> 

        其中name属性是配置字段的名字,type是数据类型,index是否打开查询即query是否能使用,stored是否放到内存中,如果放置就能在内存中看到,如果为false,那么你这么查询也看不到数据了。后面这两个字段其实你不进行定义,其默认值本来就是true,但是本文提出来是为了,如果你看不到或者搜索不到,是不是把这两个字段设为了false。最后详细讲下type吧,可以直接用solr. 包里的内容定义,也可以用fieldType去去定义定义完后以后就方便使用了。以下的定义数据类型给出这两种配置方式。

        定义数据类型:        

        有两种定义的方式(推荐第一种):

        1、定义 <fieldType/>

        配置 <fieldType/>标签(name自己定义数据类型名字,class是对应的数据类型的包位置):

        <fieldType name="string" class="solr.StrField"  /> 

        然后就能在<field/>标签中引入了(其中的type对应的就是你自己定义的数据类型了):

        <field name="roomId" type="string" indexed="true" stored="true"/> 

        2、直接在<field/>标签中的type定义 

        <field name="roomId" type="solr.StrField" indexed="true" stored="true"/> 

       <3>上面两个步骤配置的属性已经能达到储存数据的功能,如果还需要定义更多的功能请参照以下的api介绍的属性,下面给出api: 

如果不需要特殊功能的小伙伴,可以直接跳到第二个教程了,在idea中进行CRUD操作: 

字段的一般属性:

  • name

    fieldType 的名称。该值用于字段定义中的“类型”属性中。强烈建议名称仅包含字母数字或下划线字符,不能以数字开头。目前这不是严格执行的。

  • class

    用于存储和索引此类型数据的类名。请注意,您可以用 “solr” 作为前缀包含的类名称。Solr 会自动找出哪些软件包可以搜索这个类,这样solr.TextField就可以工作了。

    如果您使用的是第三方类,则可能需要具有完全限定的类名称。solr.TextField是的完全限定等效项是org.apache.solr.schema.TextField

  • positionIncrementGap

    对于多值字段,指定多个值之间的距离,这可以防止虚假词组匹配。

  • autoGeneratePhraseQueries

    对于文本字段。如果为true,Solr 将自动生成相邻词语的短语查询。如果为false,则术语必须用双引号括起来以作为短语处理。

  • enableGraphQueries

    对于文本字段,查询时使用sow=false(这是sow参数的默认值)。对具有查询分析器的字段类型使用 true (默认值),包括具有图形感知的筛选器,例如同义词图形过滤器和字符分隔符图形过滤器。

    对于既有查询分析器使用的字段类型,使用 false 包括在缺少某些标记 (例如,Shingle Filter) 时可以匹配文档的筛选器。

  • docValuesFormat

    定义用于此类型的字段的自定义 DocValuesFormat。这要求具有架构感知的编解码器(例如,SchemaCodecFactory 已在 solrconfig.xml 中配置)。

  • postingsFormat

    定义用于此类型的字段的自定义 PostingsFormat。这要求具有架构感知的编解码器(例如,SchemaCodecFactory 已在 solrconfig.xml 中配置)。

    Tip:只有默认编解码器支持 Lucene 索引反向兼容。如果您选择在 schema.xml 中自定义 postingsFormat 或 docValuesFormat,则升级到未来版本的 Solr 可能会要求您切换回默认编解码器,并在升级之前优化索引以将其重写为默认编解码器,或升级后从头开始重新构建整个索引。

字段默认属性:

属性描述隐含默认值
索引(indexed)如果为 true,则可以在查询中使用该字段的值来检索匹配的文档。true 或者 falsetrue
存储(stored)如果为 true,则字段的实际值可以通过查询来检索。true 或者 falsetrue
docValues如果为 true,则该字段的值将被放入一个面向列的 DocValues 结构中。true 或者 falsefalse
sortMissingFirst sortMissingLast排序字段不存在时控制文档的位置。true 或者 falsefalse
多值(multiValued)如果为 true,则表示单个文档可能包含此字段类型的多个值。true 或者 falsefalse
omitNorms如果为 true,则省略与该字段关联的规范(这将禁用该字段的长度规范化,并保存一些内存)。对于所有基元 (non-analyzed) 字段类型(如 int、float、data、bool 和 string)的默认值均为true。只有全文字段或字段需要规范。true 或者 false*
omitTermFreqAndPositions如果为 true,则省略该字段过帐的术语频率、位置和有效载荷。这可以提高不需要这些信息的字段的性能。这也减少了索引所需的存储空间。依赖于使用此选项在字段上发布的位置的查询将悄然无法找到文档。对于不是文本字段的所有字段类型,此属性默认为 true。true 或者 false*
omitPositions类似于 omitTermFreqAndPositions 但保留了词频信息。true 或者 false*
termVectors termPositions termOffsets termPayloads这些选项指示 Solr 维护每个文档的全部向量矢量,可选地包括这些向量中每个词条出现的位置,偏移和有效载荷信息。这些可以用来加速突出显示和其他辅助功能,但在索引大小方面会带来相当大的成本。对于 Solr 的典型用途,它们不是必需的。true 或者 falsefalse
需要(required)是否必须指示 Solr 拒绝任何尝试添加一个文件,该文件没有这个字段的值。该属性默认为 false。true 或者 falsefalse
useDocValuesAsStored如果该字段启用了 docValues,将其设置为 true 将允许 stored=false 在 fl 参数中匹配“*”时将该字段作为存储字段返回(即使有)。true 或者 falsetrue
大(large)如果实际值<512KB,大字段总是被延迟加载,并且只占用文档高速缓存中的空间。这个选项需要 stored="true" 和multiValued="false"。它的目的是为了可能有非常大的值,以便他们不被缓存在内存中的字段。true 或者 falsefalse

数据类型:

solr的数据类型定义在org.apache.solr.schema的包中,我们可以直接用solr. 相对应的数据类型找到对应的数据类型进行定义。

描述
BinaryField二进制数据。
BoolField包含 true 或 false。第一个字符中的值:1tT被解释为true;第一个字符中的任何其他值都被解释为false
CollationField支持排序和范围查询的 Unicode 排序规则。ICUCollationField 是一个更好的选择,如果你可以使用 ICU4J。有关更多信息,请参阅 Unicode 归类部分。
CurrencyField已弃用。改用 CurrencyFieldType。
CurrencyFieldType支持货币和汇率。有关更多信息,请参阅使用货币和汇率部分。
DateRangeField支持索引日期范围,还包括时间点实例(单毫秒(single-millisecond )持续时间)。有关使用此字段类型的更多详细信息,请参阅使用日期部分。请考虑使用这种字段类型,即使它只是用于日期实例,特别是当查询通常在 UTC 年/月/日/小时等边界时。
DatePointField日期字段。代表精确到毫秒的时间点,使用基于“维度点”的数据结构进行编码,可以非常有效地搜索特定值或值的范围。有关支持的语法的更多详细信息,请参阅使用日期部分。对于单值字段,必须使用 docValues = "true" 来启用排序。
DoublePointField双字段(64 位 IEEE 浮点)。该类使用基于 “Dimensional Points” 的数据结构对double 值进行编码,从而可以非常有效地搜索特定的值或值的范围。对于单值字段,必须使用 docValues = "true" 来启用排序。
ExternalFileField从磁盘上的文件中提取值。有关更多信息,请参阅使用外部文件和进程一节。
EnumField已弃用。改用 EnumFieldType。
EnumFieldType允许定义枚举的一组值,这些值可能不易按字母或数字顺序(例如,严重性等级列表)排序。这个字段类型需要一个配置文件,它列出了字段值的正确顺序。有关更多信息,请参阅使用枚举字段一节。
FloatPointField浮点字段(32 位 IEEE 浮点)。该类使用基于“维度点”的数据结构对浮点值进行编码,可以非常有效地搜索特定的值或值的范围。对于单值字段,必须使用 docValues = "true" 来启用排序。
ICUCollationField支持排序和范围查询的 Unicode 排序规则。有关更多信息,请参阅 Unicode 归类部分。
IntPointField整数字段(32位有符号整数)。该类使用基于“Dimensional Points”的数据结构对int 值进行编码,可以非常有效地搜索特定值或值的范围。对于单值字段,必须使用 docValues = "true" 来启用排序。
LatLonPointSpatialField纬度/经度坐标对;可能多值多点。通常用逗号指定为 “lat,lon” 顺序。有关更多信息,请参阅空间搜索部分。
LatLonType已弃用。请考虑使用 LatLonPointSpatialField 来代替。一个单值的纬度/经度坐标对。通常用逗号指定为 “lat,lon” 顺序。有关更多信息,请参阅空间搜索部分。
LongPointField长字段(64 位有符号整数)。该类使用基于 “Dimensional Points” 的数据结构对foo 值进行编码,从而可以非常有效地搜索特定值或值的范围。对于单值字段,必须使用 docValues = "true" 来启用排序。
PointType一个单值的 n 维点。它既用于排序不是经纬度的空间数据,也用于一些更罕见的用例。(注:这与基于 "Point" 的数值字段无关)。请参阅空间搜索以获取更多信息。
PreAnalyzedField提供一种发送到 Solr 序列化标记流的方法,可选地具有独立存储的字段值,并且在没有任何额外的文本处理的情况下存储和索引这些信息。PreAnalyzedField 的配置和用法在“使用外部文件和进程”一节中有介绍。
RandomSortField不包含值。对此字段类型进行排序的查询将以随机顺序返回结果。使用动态字段来使用此功能。
SpatialRecursivePrefixTreeFieldType(简称 RPT)接受纬度逗号经度字符串或 WKT 格式的其他形状。请参阅空间搜索以获取更多信息。
StrField字符串(UTF-8 编码的字符串或 Unicode)。字符串用于小型字段,不以任何方式标记或分析。他们有一个不到 32K 的硬限制。
TextField文本,通常是多个单词或标记。
TrieDateField已弃用。改用 DatePointField。
TrieDoubleField已弃用。改用 DoublePointField。
TrieFloatField已弃用。改用 FloatPointField。
TrieIntField已弃用。改用 IntPointField。
TrieLongField已弃用。改用 LongPointField。
TrieField已弃用。这个字段用一个 type 参数来定义要使用的 Trie * 字段的特定类;改为使用适当的“Point Field”类型。
UUIDField通用唯一标识符(UUID)。通过 NEW 值, Solr 将创建一个新的 UUID。注意:NEW 在使用 SolrCloud 时,配置一个默认值为 UUIDField 的实例对于大多数用户是不可取的(因为结果将是每个文档的每个副本将得到一个唯一的 UUID值。建议使用 UUIDUpdateProcessorFactory 在添加文档时生成 UUID 值。

版权声明:本文为kooknothing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。