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 或者 false true
存储(stored) 如果为 true,则字段的实际值可以通过查询来检索。 true 或者 false true
docValues 如果为 true,则该字段的值将被放入一个面向列的 DocValues 结构中。 true 或者 false false
sortMissingFirst sortMissingLast 排序字段不存在时控制文档的位置。 true 或者 false false
多值(multiValued) 如果为 true,则表示单个文档可能包含此字段类型的多个值。 true 或者 false false
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 或者 false false
需要(required)是否必须 指示 Solr 拒绝任何尝试添加一个文件,该文件没有这个字段的值。该属性默认为 false。 true 或者 false false
useDocValuesAsStored 如果该字段启用了 docValues,将其设置为 true 将允许 stored=false 在 fl 参数中匹配“*”时将该字段作为存储字段返回(即使有)。 true 或者 false true
大(large) 如果实际值<512KB,大字段总是被延迟加载,并且只占用文档高速缓存中的空间。这个选项需要 stored=”true” 和multiValued=”false”。它的目的是为了可能有非常大的值,以便他们不被缓存在内存中的字段。 true 或者 false false

数据类型:

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 版权协议,转载请附上原文出处链接和本声明。