Lucene 源码分析之Field

Field 类:文档对象中的属性域值,属性域值由三部分构成:名称(name)、类型(type)和值类型(value)。值类型(value)主要分为三大类:一类是文本值类型(text)[(String, Reader or pre-analyzed TokenStream)]、一类是二进制类型(binary)[{byte[]}]、一类是数值类型(numeric)[{ Number}].


Field 父子关联拓扑图



Field 类构造函数描述

protected Field(String name, FieldType type) :创建一个无初始值的field.

public Field(String name, Reader reader, FieldType type):使用Reader而不是String对象来表示域值。在这种情况下域值不会被存储,并且该域值一直用于分析和索引。具体实现请参考TextField子类。

public Field(String name, TokenStream tokenStream, FieldType type):使用TokenStream而不是String对象来表示域值。在这种情况下域值不会被存储,并且该域值一直用于分析和索引。具体实现请参考TextField子类。

public Field(String name, byte[] value, FieldType type):使用byte[]来表示域值,不能被索引。

public Field(String name, byte[] value, int offset, int length, FieldType type):使用byete[]来表示域值,并且指定起始位置和长度,不能索引。


Field 子类描述

StringField :支持索引但不分词,索引字符串的值,主要适用于"地址值"、"编号值"等其他的取值,主要用于排序和访问字段缓存。

TextField:支持索引和分词,没有term存储。主要适用于“内容”取值。

IntField:支持索引,主要用于范围过滤和排序,通过(NumericRangQuery、SortFiled.Type.Int).

LongField:支持索引,主要用于范围过滤和排序,通过(NumericRangQuery、SortFiled.Type.Long).

FloatField:支持索引,主要用户范围过滤和排序,通过(NumericRangQuery、SortFiled.Type.Float)

DoubleField:支持索引,主要用户范围过滤和排序,通过(NumericRangQuery、SortFiled.Type.Double)

StoredField:域值存储到索引,以便查询的时候进行展示。

NumericDocValueField:每个文档存储一个long值,用于排序和值检索。


FieldType 类相关属性说明:

1.private boolean indexed; 对field是否进行索引操作.
2.private boolean tokenized;是否使用分析器将域值分解成独立的语汇单元流。该属性仅当indexed()为ture时有效.
3.private boolean stored;是否存储field的值。如果true,原始的字符串值全部被保存在索引中,并可以由IndexReader类恢复。该选项对于需要展示搜索结果的一些域很有用(如URL,标题等)。如果为false,则索引中不存储field的值,通常用来索引大的文本域值。如Web页面的正文。
4.private boolean storeTermVectors;当lucene建立起倒排索引后,默认情况下它会保存所有必要的信息实施Vector Space Model。该Model需要计算文档中出现的term数,以及他们出现的位置。该属性仅当indexed为true时生效。他会为field建立一个小型的倒排索引。
5.private boolean storeTermVectorOffsets;表示是否存储field的token character的偏移量到 term vectors向量中。
6.private boolean storeTermVectorPositions;表示是否存储field中token的位置到term vectors 向量中。
7.private boolean storeTermVectorPayloads;是否存储field中token的比重到term vectors中。
8.private boolean omitNorms;是否要忽略field的加权基准值,如果为true可以节省内存消耗,但在打分质量方面会有更高的消耗,另外你也不能使用index-time  进行加权操作。
9.private IndexOptions indexOptions;描述什么可以被记录到倒排索引当中。

DOCS_ONLY:仅documents被索引,term的频率和位置都将被忽略。针对field的短语或有关位置的查询都将抛出异常。
DOCS_AND_FREQS:documents和term的频率被索引,term的位置被忽略。这样可以正常打分,但针对field的短语或有关位置的查询都将抛出异常。
DOCS_AND_FREQS_AND_POSITIONS:这是一个全文检索的默认设置,打分和位置检索都支持。
DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS:索引字符相对位置的偏移量。

10.private DocValuesType docValueType;DocValues  的类型,如果非空,field的值将被索引成docValues.
NUMERIC:数字类型
BINARY:二进制类型
SORTED:只保存不同的二进制值 byte[]
SORTED_SET.

11.private boolean frozen; 阻止field属性未来可能的变更,该属性通常在FieldType   属性已经被设置后调用。是为了防止无意识的变更。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lucene是一个开源的全文搜索引擎工具包,它提供了丰富的API和工具,可以用于创建和管理全文索引。Lucene源码是以Java编写的,其主要目的是为了提供高效的文本搜索和索引功能。 在Lucene源码中,最核心的组件是索引和搜索。索引是指将文本数据分解为若干个文档(Document),然后对每个文档建立一种倒排索引结构。所谓倒排索引,是指通过某个关键词直接找到包含该关键词的文档,而不是通过文档去找关键词。这种倒排索引结构能够提供快速的搜索和检索功能。 Lucene源码还包含一些高级的搜索功能,例如搜索结果的排序和评分。排序是指根据某种规则,将搜索结果按相关性或其他因素进行排序,以便更好地展示给用户。评分是指根据某种算法,为搜索结果打分,以衡量其与查询的相关性。这些高级搜索功能可以根据用户的需求进行定制和扩展。 此外,Lucene源码还包含了一些辅助功能,例如分词器(Tokenizer)和过滤器(Filter)。分词器用于将输入的文本数据拆分为词组,并去除无关的符号和停用词。过滤器则用于对已经拆分的词组进行处理,例如大小写转换、同义词替换等。 总体来说,Lucene源码是非常庞大和复杂的,其中包含了大量的算法和数据结构。研究和理解Lucene源码需要对Java编程和搜索引擎原理有一定的了解。通过对源码的阅读和分析,可以更好地理解Lucene的工作机制,并能够根据自己的需求进行二次开发和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值