导航

solr笔记

Posted on 2013-12-04 17:01  酷鱼影子  阅读(215)  评论(0编辑  收藏  举报

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']"