lucene/solr注意点 你的名字 2022-04-21 15:02 179阅读 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/
还没有评论,来说两句吧...