Solr-lucene 使用案例大全

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本文sole lucene的使用案例汇总。

Solr-lucene 使用案例大全

格式有失真,可以到微盘下载。认识lucene&solr-part3.pdf

1. Cfs格式

version+num+offset_list+content_list

头部索引信息+内容信息.eg 123|5|0-12-25-30-46-60|con0|con1|con2|con3|con4|con5

用于小文件管理。参考 CompoundFileDirectory

 

2. CRC 校验

Size(int)+len(int)+bytes+crc(long), 其中 size=4+bytes.len+8

用于分片数据传输

 

3. 内存申请

用于高效利用内存资源

线性法

Eg   init size=2k  any time put item, check if(needSize>size) then size=size*2

Eg   init size=2k   any time put item, check if(needSize> size ) then size=size+size>>1


分层查找法 Eg  参考 ByteBlockPool

  * An array holding the offset into the {@link ByteBlockPool#LEVEL_SIZE_ARRAY}

  * to quickly navigate to the next slice level.

 public final static int[] NEXT_LEVEL_ARRAY = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9};

  * An array holding the level sizes for byte slices.

 public final static int[] LEVEL_SIZE_ARRAY = {5, 14, 20, 30, 40, 40, 80, 80, 120, 200};

 

4. trieTree

trietree and FST 用于前缀查找、偏移映射、统计词频、统计IP等。参考FST util 工具

Eg tree 每个node 保存频率数,遍历预料库之后,遍历输出终止结点频率,就输出了磁盘。FST 直接将term与存储偏移关系映射起来。

 

5. 数组池

参考 IntBlockPool 用于批量Int数字存储访问

 

6.

用于top排序 参考 PriorityQueue包括子类,主要用于top排序。变种,带指定阀值的翻页top

 

7. TimSort

用于局部有序的数值排序,速度杠杠的牛逼。前提:局部有序。实际计算规模比快速排序还少。参考TimSorter

 

8. 引用计数

用于并发资源共享和资源释放。Eg 读索引的时候,每次reader被应用原子计数++,用完后--,最后close的时候,计数为0 释放资源。参考SolrIndexSearcher numOpensnumClose用法

 

9. 线程局部变量访问

参考CloseableThreadLocal,是改进的ThreadLocal。用在需要线程级别参数传递。Eg 客户端多线程查询,每个线程传入路由信息,写入threadlocal中,然后客户端获取threadlocal值。前提是,其他方式传入路由不是很方便的时候。或者代价高。

 

10. 跳跃表

用于快速查找、lazy load。通过构建多层-有序-分块明文索引信息(eg 偏移值或者下标值),然后通过比较明文索引信息,定位数据块,然后从块中顺序比较获取值。又或者内存一次无法全部加载整个数据,那么对磁盘数据做预先调表,然后需要的时候,就加载进来。

参考底层SegmentCoreReaders,上层eg StandardDirectoryReader

 

11. Compress

压缩一种应用在数值类型,一种应用在字符串类型,其中数值类型如下:vbyte/vint/vlong

zig-zags/diff/lz4,对应字符串eg city to codeproperty to codeexist by boolean url 前缀编码。

trieInt trieLong TrieDate 对数值的字节分段建索引和查找存储

 

12. 分布式query

   参考SearchHandler.handRequestBody分阶段并发处理请求,并且有超时控制、cache链接共享。其中LBHttpSolrServer 负载均衡SolrServer,也是不错的实现

 

13. Plugin机制

参考SolrResourceLoader,实现服务、插件的动态拔插。将solr功能口子完全暴露给研发者、性能优化者、个性化服务定制等。ClassLoader生成和反射构造对象,使得初始化对象可能出现“不一致”,原因是自己的classLoadersolr启动的不一样!

 

14. 绕口solr直接操作lucene API

通过firstSearcher获取索引视图SolrIndexSearch.getReader(),然后以lucene API来执行特殊业务的定制。Eg批量term,返回其中文档只需包含批量term的只是一个就可以了。配置solrconfig.xml

 

15. 定制更新

参考DirectUpdateHandler2 实现自己的更新逻辑。进而实现自己的内存索引+磁盘索引结构。实现自己的实时结构。

 

16. 多块磁盘多驱动下索引读写

同一个物理机,单进程多个solrcore,可以根据不同solrcore配置不同索引数据目录

    ${solr.ulog.dir:}

${solr.data.dir:}

 

17. LRUCache&FastLRUCache

通用的cache,可以直接使用到其他场景中

参考FastLRUCacheLRUCache,前者适合读多写少,后者适合写多读少

 

18. Codec B+

https://issues.jboss.org/browse/ISPN-1349

http://grokbase.com/p/gg/elasticsearch/133112b662/issue-indexing-50mil-docs-via-bulk-api

http://www.research.ibm.com/haifa/Workshops/ir2005/papers/DougCutting-Haifa05.pdf

 

19. 低频词优化

 > schema.xml

        solrconfig.xml

  low frequence terms is writtern is a special way to save a single IO when retrieving a documents。低频词直接将docid写在term后面了。

 

20. unique id codec

http://opensourceconnections.com/blog/2013/06/05/build-your-own-lucene-codec/

https://issues.apache.org/jira/browse/LUCENE-4498

http://lucene.472066.n3.nabble.com/Fetching-uniqueKey-and-other-int-quickly-from-documentCache-td4119445.html

 

21. SPI

SPI出现在4.*序列中应用在codec的加载

 

22. Solr自己的序列化

   参考JavaBinCodec 用于solr范围内的对象序列化

 

23. Directory

   扩展分布式虚拟文件系统的Directory

   StandardDirectoryFactory RAMDirectoryFactory MMapDirectoryFactory RAMDirectoryFactory

HdfsDirectoryFactory

 

24. DataImport

from mysql  batch task to hdfs  block to build

from mysql batch task to local xml to build

from hdfs to build/ from odps to build

fealtime add to master(with backup select) to slave commit log then syn consum added record object to index


25. Analyzer

Paoding /AliWs /IK/WhitespaceTokenizerFactory /NgramFilterFactory/ EdgeNGramFilterFactory

PatternTokenizerFactory /StandardTokenizerFactory /Payload term:value/JsonPreAnalyzedParser/CustomJson

ChineseFilterFactory /CJKBigramFilterFactory

 

26. 拼音

  拼音搜汉字,包括拼音的缩写搜汉字

 

<fieldType name="cn_pinyin"class="solr.TextField"positionIncrementGap="100"omitNorms="false"omitPositions="true">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"side="front"minGramSize="1"maxGramSize="20" />
    <filter class="solr.PimICUTransformFilterFactory"/>
  </analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>
</fieldType>


27. 汉字

   繁体字转汉字

 

<fieldType>
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"side="front"minGramSize="1"maxGramSize="20" />
    <filter class="solr.ICUTransformFilterFactory"id="Traditional-Simplified"direction="forward"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.ICUTransformFilterFactory"id="Traditional-Simplified"direction="forward"/>
    </analyzer>
</fieldType>

28. 裂变 

{"discount_price":"3000","original_price":"35.0","pic":"http://img.taobaocdn.net/bao/uploaded/i1/T1R1CzXeRiXXcckdZZ_032046.jpg","post_fee":"0"}


29. Not exist

Index 阶段 Null to -1   Null to “”

query阶段 ! [0 TO MAX]  ![* TO *]

30. Deep page

with score deep page

without score deep page

31. Result mixed & pass repeat

use collect chain that two collects defined

much get and remove  under collect


32. Random

Random score then random result

topN random

33. like

For include one term

More like this

termVectors=true

defType=edismax&mlt=true&mlt.fl=name&mlt.mintf=1&mlt.mindf=1

For include more term


34. Synonyms

Eg 一百天与100天,注意排序问题


35. Minimum match

defType=dismax

minimum mm=2

q.op=AND


36. Group by

  group by field, by query , by function queries


37. Fl alias name

ALIAS_NAME:FIELD_NAME

price:price_usd


38. Sql query

Sql syntax  to solr syntax

词法分析-句法分析-语义分析-语法树

性能优化:公式变换+公共部分提取共享

参考链接 http://blog.sina.com.cn/s/blog_4d58e3c0010185n2.html


39. Performance

   put s more than gets solr.LRUCache

   gets  more than puts solr.FastLRUCache

   facet.method=enum filter cache each term

   StandardDirectoryFactory try to choose itself

   SimpleFSDirectoryFactory local fileSystem  doesn’t scale well with a high number of threads

    NIOFSDirectoryFactory schales well with many threads ,doesn’t work well on mirosoft windows

    MMapDirectoryFactory default for solr for 64 –bit linux system(3.1 to 4.0) desirable for not NRT search

    NRTCachingDirectoryFactory nrt search store some parts of index in memory

    RAMDirectoryFactory  is not designed to hold large amounts of data. Replication wont work

目录
相关文章
|
XML JSON 搜索推荐
12Solr简介
12Solr简介
43 0
|
XML 存储 JSON
Solr学习总结
Solr学习总结
151 0
Solr学习总结
|
存储 搜索推荐 Java
全文搜索引擎 Lucene Solr ElasticSearch 关系?
全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
全文搜索引擎 Lucene Solr ElasticSearch 关系?
|
自然语言处理 索引
Lucene&solr 4 实践(3)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要是针对FSA FST做前期知识储备和基本概念扫盲。FST是lucene4 solr4 的索引和查询的核心! 下面的内容来自多个出去,出去就不一一列举。
114 0
Lucene&solr 4 实践(3)
|
自然语言处理 算法 架构师
Lucene&solr 4 实践(8)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Lucene 5 有哪些点对大数据倒排索引和检索有优势 1.索引懒加载lazy加载,意味着按时间段或者其他分割的数据可以按需加载 2.FST词典结构以及基于图的索引、查询,使得内存消耗更低 3.异步合并,使得增量索引合并时的“索引整理”开销或者对查询影响更小 4.commitpoint 视图下reader自动更新,使得大规模数据的虚拟分组、全量切换更加方便。
141 0
|
编解码 缓存 自然语言处理
Lucene&Solr 4 实践(2)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。在第一部分,还不完善基础上,进入第二部分吧。结合源码来认识lucene! 重点是:从需求到方案到实践编码到结果、从原理到实现、从结构到细节、从总体认识到西部深入。
101 0
|
自然语言处理 算法 Apache
Lucene&solr 4 实践(5)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。这部分先通透FST的原理和构造方法,方便理解lucene FST、Builder两个核心对象,从而彻底看清基于图的lucene4索引、查询的发展脉络。至于读懂后有神马用,自个琢磨啊! 看懂估计要死伤不少脑细胞哦!
232 0
|
自然语言处理 Java API
Lucene&solr 4 实践(1)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Solr&Lucene 4.0 好,很好,很强大。对于从lucene2.0 solr0.9 就关注,一直过来的人来讲, 4.X序列除了的架构、风格、API改变了很多很多,更重要的是业务的优化口子更多了,专业知识要求更高。整个架子的容量、包容性、以及适应信息检索的科研,直接上来demo运行easy、深入会很难。需要整理了解的知识点太多了。
101 0
|
算法 Java Maven
Lucene&solr 4 实践(4)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要分析FST,快乐理解lucene fst包的源码细节和来龙去脉。
154 0
|
XML 缓存 自然语言处理
Solr 的作用,为什么要用solr服务,
Solr 的作用,为什么要用solr服务,
285 0