zoukankan      html  css  js  c++  java
  • solr笔记

    solr触发URL

    solr更新索引: http://localhost:8080/solr/fare/dataimport?command=delta-import&commit=true&optimize=true

    Solr 删除全部索引:http://localhost:8080/solr/update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

    solr 删除指定ID的索引:http://localhost:8080/solr/update/?stream.body=<delete><id>1</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
    solr删除根据查询语句指定索引   http://localhost:8080/solr/fare/update/?stream.body=<delete><query>policyId:38502</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true&optimize=true

      dataconfig的结构

        dataconfig的结构不是一成不变的,entity和field元素中的属性是随意的,这主要取决于processor和transformer。

          以下是entity的默认属性

    •  name(必需的):name是唯一的,用以标识entity
    • processor:只有当datasource不是RDBMS时才是必需的。默认值是SqlEntityProcessor
    • transformer:转换器将会被应用到这个entity上,详情请浏览transformer部分。
    • pk:entity的主键,它是可选的,但使用“增量导入”的时候是必需。它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
    • rootEntity:默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。

         一下是SqlEntityProcessor的属性

    • query (required) :sql语句

    • deltaQuery : 只在“增量导入”中使用

    • parentDeltaQuery : 只在“增量导入”中使用

    • deletedPkQuery : 只在“增量导入”中使用

    • deltaImportQuery : (只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。这里有一个命名空间的用法${dataimporter.delta.}详情请看solr1.4.

    Commands

    The handler 通过httprequest 向外界提供它的API . 以下是一些或许你会用到的操作

    • full-import : "完全导入"这个操作可以通过访问URL http://:/solr/dataimport?command=full-import 完成。

      • 这个操作,将会新起一个线程。response中的attribute属性将会显示busy。

      • 这个操作执行的时间取决于数据集的大小。

      • 当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间

      • 当“增量导入”被执行时,stored timestamp这个时间戳将会被用到

      • solr的查询在“完全导入”时,不是阻塞的

      • 它还有下面一些参数:

        • clean : (default 'true'). 决定在建立索引之前,删除以前的索引。

        • commit: (default 'true'). 决定这个操作之后是否要commit

        • optimize: (default 'true'). 决定这个操作之后是否要优化。

        • debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here)

    • delta-import : 当遇到一些增量的输入,或者发生一些变化时使用`DataImport - 航梦 - 火星?地球? http://:/solr/dataimport?command=delta-import . 它同样支持  clean, commit, optimize and debug 这几个参数.

    • status : 想要知道命令执行的状态 , 访问 URL http://:/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况。

    • reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://:/solr/dataimport?command=reload-config

    • abort : 你可以通过访问 url http://:/solr/dataimport?command=abort 来终止一个在运行的操作

    从数据库导入大量数据而导致内存溢出问题解决(网上资料仅参考)

    <entity name="TestEntity" dataSource="dsSqlServer" pk="Id" query="SELECT Id,Title,Author,Content,Url,AddOn FROM Test WHERE Id>=${dataimporter.request.offset} And Id<=${dataimporter.request.offset}+10000" >

       同时运用 
       1) /dataimport?clean=true&offset=0
      2) /dataimport?clean=false&offset=1000000
      3) /dataimport?clean=false&offset=2000000
      这些URL去请求SOlr进行索引.Solr会读取offset这个参数区建立query查询语句,然后去获取这些查询语句的数据去索引.但如此最好还是自己写个类做下控制.可以一开始获取表的总结果条数然后通过以上循环迭代完成.其中里面的+10000也可以设置为一个参数,如${dataimporter.request.intervalRows}表示一次获取多少条,然后在URL里加&intervalRows这个参数,具体我还还没试过.同时由于索引还是个长期的过程,所以这里最好记录好每次索引索引成功的间隔.比如在30000-40000索引成功的时候将他们记录日志.如此在索引40000-50000的时候一旦发生问题,我们可以通过日志获取上一次成功索引的间隔数,再从这个间隔去重新生成URL去索引数据.


    更多:http://blog.csdn.net/jiushuai/article/details/8087961

     solr多core

    在实际应用场景中,常常会有表嵌套关系,在solr中的表现即是实体嵌套实体,以支持某些字段多值的情况,但是这样做有一个很大的性能问题,就是导入速率非常慢
    原因是嵌套会造成访问数据库量增大
    解决方案:
    1、solr使用多core
    2、后台请求多core数据,并根据关系进行合并

    增量导入慢问题解决

    分析:增量导入中有两个问题
    1、导入慢,原因是每次都要根据ID去查询数据库,数据量大时访问多
    2、导入非常耗内存
    解决方案如下:
    去掉增量查询语句,主查询语句,改为类似:
    <entity name="item" pk="ID" query="SELECT * FROM item
    WHERE '${dataimporter.request.clean}' != 'false'
    OR last_modified > '${dataimporter.last_index_time}'"
    >

    注意, '${dataimporter.request.clean}' != 'false' OR last_modified > '${dataimporter.last_index_time}' 这个条件放在其他条件之后
    全量导入 使用命令dataimport?command=full-import&clean=true
    增量导入使用dataimport?command=full-import&clean=false

    这样处理后全量和增量共用一条一句,极大的提高了查询速率


    关于query条件设置:

    【LIKE-模糊】:id:*111*        查找ID中含有111的项(与like同)
    【IN-多值】id:(1 2 3 4)    查找ID为1,2,3,4的项(与in同)
    【BetweenAnd-范围】id:[1 TO *]   查找ID大于等于1的项(与between and同 TO可省略) "Fields:['2013-01-01' TO '2014-01-01']"


  • 相关阅读:
    grep用法小结
    观察者模式
    类之间的关系
    Linux——makefile编写
    探索C++多态和实现机理
    进程间通信——管道
    C++继承引入的隐藏与重写
    Linux 文件读写操作与磁盘挂载
    xShell终端下中文乱码问题
    深入理解C++ new/delete, new []/delete[]动态内存管理
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266334.html
Copyright © 2011-2022 走看看