lucene

Posted 仰望星空的程序

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lucene相关的知识,希望对你有一定的参考价值。

python可以把float类型二进制转为int类型二进制,转化代码:

 import struct>>> def float2bin(num):...  return ''.join(bin(ord(c)).replace('0b', '').rjust(8, '0') for c in struct.pack('!f', num))... >>> >>> def bin2float(bits):...  return struct.unpack('f',struct.pack('I',int(bits,2)))...


当然, 也可以用Java用以下函数查看一个Float小数的二进制字符串

System.out.println(Integer.toBinaryString(Float.floatToIntBits(3.14f)));


索引是需要分词的,原因是,程序员把索引想象成一个树结构,这种结构在查找上的速度性价比高。而为了存储性价比也一起高,如果一个节点的所有子节点都是符合查找条件的索引,那么就之间存储这个节点了,不存它的叶子节点了。分词就是为了制造这个树结构的每一条分支。


数值类型分词与文本分词不同, 比如整数1, 转换成字节数组后,其值为[60 8 0 0 0 1](注意数组中是16进制, 而非10进制),其中上一章提到,0x60是SHIFT_START_INT,标识数据类型是int。8对应二进制1000,但是分词是按16进制的步长来切分的,所以不必转为二进制来理解。


lucene源码里有个变量叫precisionStep,用来控制某个数被分词时,每块分词的大小,默认为4;precisionStep越大,每块分词就越大,树就越矮,查找速度就越快,然而查找精度就越低(想象一下极限情况, 就一个根节点和一堆叶子节点。要么存储一个根节点,用户查找然后蹦出一大坨结果,用户大怒,查了等于没查。要么存储一大坨叶子节点,磁盘炸了,运维怒。)precisionStep越小 ,每块分词就越小,树就越高,查找速度就越慢,然而查找精度就越高?其实不是,切分细致到某种程度的时候,再切细,你存储的节点数也不能更少了。所以precisionStep要多测一下,选合适的值。



以上是关于lucene的主要内容,如果未能解决你的问题,请参考以下文章

lucene demo代码

三搜索引擎篇-lucene入门代码示例

ElasticSearch 学习笔记一 简介

Lucene学习总结

Lucene分析

1. 初识 Lucene