科帮网-Java论坛、Java社区、JavaWeb毕业设计

登录/注册
您现在的位置:论坛 资料库 开源社区 > solr提交索引的三种方式
总共48085条微博

动态微博

查看: 1886|回复: 0

solr提交索引的三种方式

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-10-09 12:26:40 |只看该作者 |倒序浏览
    三种solr提交索引的方式
    1. commit
    通过api直接commit,这样性能比较差,在我测试下,平均每条commit600ms
    HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/dtrace");
    SolrInputDocument doc1 = new SolrInputDocument();
    doc1.addField("id", i);
    solrServer.add(doc1);
    solrServer.commit();

    2. AutoCommit
    参考:http://wiki.apache.org/solr/SolrConfigXml
    autoCommit一般的配置如下:
    1.   <updateHandler class="solr.DirectUpdateHandler2">
    2.         <autoCommit>
    3.                  <maxTime>2000</maxTime>
    4.                 <openSearcher>false</openSearcher>
    5.         </autoCommit>
    6.         <autoSoftCommit>
    7.                 <maxTime>10000</maxTime>
    8.         </autoSoftCommit>
    9.           <updateLog>
    10.                <str name="dir">${solr.shard.data.dir:}</str>
    11.           </updateLog>
    12.      </updateHandler>
    复制代码

    4.0开始引入了autoSoftCommit和openSearcher的概念这个是什么意思呢?

    As of Solr 4.0, there is a new “soft commit” capability, and a new parameter for hard commits – openSearcher. Currently, there’s quite a bit of confusion about the interplay between soft and hard commit actions。

    solr hard commit做的事情

    1、生成一个新的tlog文件,删除旧的tlog。
    2、把内存中的索引文件fsync到磁盘,并创建一个index descriptor。这里比较耗费机器资源。
    这样即使jvm崩溃或者宕机,也不影响这部分索引。
    3、使得索引在searcher中可见。但是也需要重新打开searcher才行。

    soft commit做的事情
    1、把内存文件fsync到磁盘,但不创建index descriptor。
    也就是说原索引和现在的索引还互不感知,所以如果jvm崩溃,那这部分索引就没了。
    2、可以重新打开searcher,使得新的索引可以被查找到。

    更详细的信息参考:http://searchhub.org/2013/08/23/ ... ommit-in-sorlcloud/

    3. CommitWithin
    简单的说就是告诉solr在多少毫秒内提交,比如如果我指定<add commitWithin=10000>,将会高速solr在10s内提交我的document。用法
    1.可以在add方法设置参数,比如 server.add(mySolrInputDocument, 10000);
    2.
    UpdateRequest req = new UpdateRequest();
    req.add(mySolrInputDocument);
    req.setCommitWithin(10000);
    req.process(server);

    参考:http://wiki.apache.org/solr/CommitWithin


    科帮网-Java论坛、Java社区、JavaWeb毕业设计 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网-Java论坛、Java社区、JavaWeb毕业设计享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网-Java论坛、Java社区、JavaWeb毕业设计的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网-Java论坛、Java社区、JavaWeb毕业设计管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表