是否切词:对关键词是否切分,举例,姓名域的一个值:"张三" , 是否切分成"张"、"三"等等多个term。

是否索引:建立索引的时候是否对该字段域对应的数据建立索引。是不是放到倒排表中,此域的关键字与document之间的对应关系存不存在即反向关系存不存在,通过term能不能定位到document

是否存储:对此字段域的数据进行获取时,是否能还原! document.get("fieldName") 能不能得到内容

//先写着,把打分过程捋一捋,再完善
FieldType fieldType = new FieldType();
// 存储设置
fieldType.setStored(true); //索引设置
fieldType.setIndexed(true);// 是否索引 索引了才能被搜索到
fieldType.setIndexOptions(IndexOptions.DOCS_ONLY);//仅仅存储文档,词频和位置信息被忽略
fieldType.setOmitNorms(true);//标准化因子是否对此字段忽略生效,true忽略 影响评分
fieldType.setStoreTermVectorOffsets(false);//词向量里面是否存储词元字符偏移量 节省存储
fieldType.setStoreTermVectorPayloads(false);//词向量里面是否存储负载因子 可加快查询速度 、影响评分
fieldType.setStoreTermVectorPositions(false);//词向量里面是否存储位置 节省存储
fieldType.setStoreTermVectors(false);//是否存储词向量
fieldType.setTokenized(true);// 是否被分词

存储域选项:Field.Store

YES: 域中的内容全部存储到文件中,方便进行文本的还原!

NO:document.get(String name),无法得到值

索引域选项:Field.Index

ANALYZED,分词之后再建立索引,适用于标题、内容等

NOT_ANALYZED,索引,但不切词,身份证号,ID等,适用精确查询(说是说不切词,其实还是有一个切词的,就是值本身),不切分,其实默认就可以当做keywordAnalyzer了,其他任何切词器对它都失效了

ANALYZED_NO_NORMS,分词但不存储norms信息,norms中包括了创建索引的时间、权值即排序等信息

NOT_ANALYZED_NO_NORMS,不分词也不存储

NO,不进行索引

一个域为什么会被存储(store)而不被索引(Index)呢?在一个文档中的所有信息中,有这样一部分信息,可能不想被索引从而可以搜索到,但是当这个文档由于其他的信息被搜索到时,可以同其他信息一同返回。没有经过切词,根本就不会有这个term!但是存储了原始内容

举个例子,读研究生时,您好不容易写了一篇论文交给您的导师,您的导师却要他所第一作者而您做第二作者,然而您导师不想别人在论文系统中搜索您的名字时找 到这篇论文,于是在论文系统中,把第二作者这个Field的Indexed设为false,这样别人搜索您的名字,永远不知道您写过这篇论文,只有在别人 搜索您导师的名字从而找到您的文章时,在一个角落表述着第二作者是您分信息,可能不想被索引从而可以搜索到,但是当这个文档于其他的信息被搜索到时,可以同其他信息一同返回。(对应代码就是通过其他字段找到该字段对应的Document的时候,然后再通过Document的get("Field的name")来得到这个字段的数据(当然如果也是"不存储"方法那么得到的将是空Null))

A term vector: 词向量

is a list of the document's terms and their number of occurrences in that document.

offset:偏移量

比如要存储如下词:term,termagancy,termagant,terminal

节省存储

position:位置增量

1    1      1        1              position位置增量

how are  you  thank   you

0-3  4-7 8-11 12-17 18-21      offset

停用词过滤之后

1:how[0-3]

2:you[8-11]   position位置增量为2了

Offset(偏移):反向索引中保存term时,后面的词仅仅保存前缀在词中的偏移,基于数字的,获得token的位置,多用于加亮
position(位置):位置是基于term的,当你要用到的它的位置信息,比如中间是否间隔了term: phrasequery.setslop;
payload(负载因子):当要存储的信息很多的时候,存放在倒排表里,利用跳跃表,有利于大大提高搜索速度,还可以存储一些自己的信息,用户可以根据自己存储的信息,来影响Lucene的打分

词向量:used to locate specific documents in the data file,高亮

1.TypeAttributeImpl

分词的词汇类型,默认值为“word”

2.OffsetAttributeImpl

Token分词的起始字符,结束字符偏移量

3.PositionIncrementAttribute

它表示tokenStream中的当前token与前一个token在实际的原文本中相隔的词语数量

4.PositionLengthAttributeImpl

Token所占用的位置个数

举例:

原文本:I'm a student. these are apples    
TokenSteam: [1:  I'm ]  [2:a]   [3:student]     [4:these]   [5:are ]   [6:apples]
(1) TermAttribute: 表示token的字符串信息。比如"I'm"
(2) TypeAttribute: 表示token的类别信息(在上面讲到)。比如 I'm 就属于,有撇号的类型
(3) OffsetAttribute:表示token的首字母和尾字母在原文本中的位置。比如 I'm 的位置信息就是(0,3)
(4) PositionIncrementAttribute:这个有点特殊,它表示tokenStream中的当前token与前一个token在实际的原文本中相隔的词语数量。
      
比如: 在tokenStream中[2:a] 的前一个token是[1:  I'm ]
,它们在原文本中相隔的词语数是1,则token="a"的PositionIncrementAttribute值为1。如果token是原文本中的第
一个词,则默认值为1。因此上面例子的PositionIncrementAttribute结果就全是1了。

如果我们使用停用词表来进行过滤之后的话:TokenSteam就会变成: [1:  I'm ]   [2:student]   
[3:apples]这时student的PositionIncrementAttribute值就不会再是1,而是与[1:  I'm
]在原文本中相隔词语数量=2。而apples则变成了3。

那么这个属性有什么用呢,用处很大的。假如我们想搜索一个短语student apples(假如有这个短语)。很显然,用户是要搜索出student
apples紧挨着出现的文档。这个时候我们找到了某一篇文档(比如上面例子的字符串)都含有student
apples。但是由于apples的PositionIncrementAttribute值是3,说明肯定没有紧挨着,就不会被搜索到。轻而易举
的解决了短语搜索的难题哦。

phrasequery,是可以解决类似 查询海南,不会召回南海的问题,同样还可以实现模糊查询,但是仅仅限于term之间,term之间才可以设置slop。

例如:张ax1111,分词为张 ax1111,phrasequery可以解决不召回ax1111张的问题,但是没有模糊功能了,只能精确(张ax111*也不行),N-gram可以解决此类问题。

precisionStep 数值类型的值转换成字符串类型的值时,影响切分之后term的个数!

precisionStep 越小那么被“切”成的的字符串就会多。precisionStep 越小则value被“切”成的term就越多,也就是说索引体积将会增大。被“切”分的term越多则可能在NumericRangeQuery中被细分 的小区间中存在的可能性也就越高,那么查询遍历的次数也就越少,性能也就越好。因此,理想的precisionStep只能依据自己的测试而获取。同时请注意如果只是对其进行sort而不需要范围查询可以将precisionStep=Integer.MAX_VALUE。这样只会生成一个term,从而不会增大索引体积。

lucene 专业名词作用整理的更多相关文章

  1. javascript各种专业名词

    刚开始学javascript经常看到各种专业名词,在此整理一下个人的学习笔记: 直接量 直接量——就是程序中直接使用的数据值,如:88    //数字(String)"hello world ...

  2. 2018 php的flush和ob_flush不起作用 整理解决

    2018 php的flush和ob_flush不起作用 整理解决成功解决. 要点 : 使用函数 str_repeat2处配置:检查php.ini.Nginx 中有下面两个设置使用方式:echo str ...

  3. Android开发专业名词及工具概述

    前言: 系统的学习下Android开发中涉及到的一些专业名词 和Android开发工具 名词: 一.SDK(Software Development Kit) 软件开发工具包:一般都是一些软件工程师为 ...

  4. [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文

    综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...

  5. redux相关专业名词及函数提要

    redux: 用来管理react app 状态(state)的一个架构. store: 通过createStore()创建,用来存放state,与react app是完全分离的.createStore ...

  6. [专业名词·硬件] 1、等效串联电阻ESR概述及稳压电路中带有一定量ESR电容的好处

        一.等效串联电阻ESR概述 ESR是Equivalent Series Resistance的缩写,即“等效串联电阻”.理想的电容自身不会有任何能量损失,但实际上,因为制造电容的材料有电阻,电 ...

  7. IT 需要知道的一些专业名词和解释 (长期更新)

    c2c: 就是我卖东西你来买  (comsumer to comsumer个人对个人) b2c: 就是我开公司卖东西你来买 (business to comsumer 公司对个人) o2o: 就是我开 ...

  8. Lucene 常用名词解析

    索引的创建:IndexWriter: 用于创建索引Directory: 这个可以用来定义我们的索引是存放在内存中还是在硬盘上Analyzer: 分词器 有几种()这个地方需要好好解释下Document ...

  9. 学习Zookeeper需要了解的专业名词

    一.Zookeeper的集群角色 Leader:该角色是整个zookeeper集群工作机制中的核心 Follower:该角色是zookeeper集群状态的跟随者 Observer:在集群中充当观察者的 ...

随机推荐

  1. Linux安装IDA神器

    1.下载windows版的IDA 版本:6.6.141224打包绿色版:http://pan.baidu.com/s/1kTsXZiJ 密码:jj5q 2.复制全部文件到Linux的文件夹中 3.使用 ...

  2. CPU MPU MCU SOC SOPC关系及区别

    在嵌入式开过程,会经常接触到一些缩写术语概念,这些概念在嵌入式行业中使用率非常高,下面我们就解释一下这些概念之间的关系和区别: 1.CPU(Central Processing Unit),是一台计算 ...

  3. UIkit框架之Uivew

    1.继承链:UIresponder:NSObject 2.通过使用 addGestureRecognizer:方法可以为视图添加手势 3.下面的属性都可以用来用于动画 @property frame ...

  4. Date and Time

    The PHP date() function is used to format date and/or a time and formats as timestamp to a more read ...

  5. Redis - Keepalived + redis 主备热备切换

    1. 热备方案 硬件:server两台,分别用于master-redis及slave-redis 软件:redis.keepalived 实现目标: 由keepalived对外提供虚拟IP(VIP)进 ...

  6. Balance_01背包

    Description Gigel has a strange "balance" and he wants to poise it. Actually, the device i ...

  7. Unity3D ShaderLab 使用贴图对模型的高光进行遮罩

    Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...

  8. 初步探讨WPF的ListView控件(涉及模板、查找子控件)

    本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmln ...

  9. LeetCode Maximum Subarray (最大子段和)

    题意: 给一个序列,求至少含一个元素的最大子段和? 思路: 跟求普通的最大子段和差不多,只不过需要注意一下顺序.由于至少需要一个元素,所以先将ans=nums[0].接下来可以用sum求和了,如果小于 ...

  10. 深入理解JavaScript闭包

    Closure 闭包的定义1: <JavaScript高级程序设计>定义闭包:闭包是指有权访问另一个函数作用域中的变量的函数. 创建闭包的常见方式,就是在一个函数内部创建另一个函数. 然而 ...