lucene/solr注意点

你的名字 2022-04-21 15:02 263阅读 0赞

[b][color=olive][size=large]
影响搜索速度的原因很多,最终要因地制宜。

大致方向上,用下面的方式可以提高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的通用的分片机制来完成,通用就意味着效率稍低。
所以当有更高的数据请求的时候,推荐使用定制分片,这样可以通过业务逻辑来大大的降低搜索和索引的时间。[/size][/color][/b]

来自:http://sling2007.blog.163.com/blog/static/84732713201393141153591/

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读

    相关 css注意

    em:相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的1个文字大小 p\{ text-indent:2em;

    相关 语法分析注意

    一棵分析树可对应多个推导序列,但是分析树和最左(右)推导序列之间具有一一对应关系 如果一个文法中存在某个句子有两棵分析树,那么该句子是二义性的。 对于任意一个上下文无

    相关 ReactJs 注意

    注意点:1.在react创建之初,使用的是React.createClass方法来创建组件类,这种方式下,通过定义组件类的一个getInitialState方法来获取初始值,但

    相关 yml文件注意

    1、在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;  2、yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;

    相关 高性能Javascript注意

    重绘和重排 当下载完页面后,浏览器会解析文件病穿件两个内部数据结构,一个DOM树,一个渲染树。根据两棵树,浏览器来渲染页面。 当页面的DOM几何属性(改变宽高)改变时