`
qindongliang1922
  • 浏览: 2147507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116328
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124593
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58457
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70354
社区版块
存档分类
最新评论

lucene/solr注意点

阅读更多

影响搜索速度的原因很多,最终要因地制宜。

大致方向上,用下面的方式可以提高lucene搜索速度
1、内存索引,可以实时。
2、使用较小的mergeFactor,保持较少的文件,加快搜索速度
3、增大区间搜索的precisionStep,这会增大索引体积,但是减少了区间内记录的遍历。在solr中 filterquery,如果很多的fq参数一样,那么最好开缓存。否则就关闭
4、使用较少的关键字查询条件,比如把title和keyword,放在一个字段中索引起来,然后用着一个字段来查询。这减小了不同域的词典。?
5、减少搜索条件
6、减小搜索条件的结果集合,比如有的时间搜索,如果是全部时间,就不要传这个参数了,因为这样要解析这个时间,还要搜索出结果集,与其他条件的结果集做操作。如果这个搜索条件的结果集占了全部数据的一大半,甚至全部,那么是很不明智的。特别是数据(比如xxx亿)很多的时候。
7、使用filter query,这可以使用缓存。

上面的都是从搜索的角度看,其实索引时候的数据结构也是很重要的。
比如对“山东省大范围降雪”分词的时候,山东省可以分为“山东”、“省”或者分成一个词“山东省”
虽然在搜索的时候,可以用phrasequery,使得这两种分词的结果一样。但是在索引分词的时候,这两种分词差别是很大的:
在倒排索引中,很可能存在这种情况,“山东省”对应着10W条记录,而“山东”对应着12W条记录,“省”对应着1000W条记录。
而在搜索的时候,如果分词“山东省”,则只需要读入10W记录就可以。
而如果分词成“山东”“省”则需要读入12W+1000W记录,并且做并集。
所以这会慢一些。

solr中,如果使用solrcloud模式,可以用自动分片和定制分片两种方式。
在自动分片的时候,数据索引和搜索都需要通过solrcloud的通用的分片机制来完成,通用就意味着效率稍低。
所以当有更高的数据请求的时候,推荐使用定制分片,这样可以通过业务逻辑来大大的降低搜索和索引的时间。


来自:http://sling2007.blog.163.com/blog/static/84732713201393141153591/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics