solr学习第七课----solr之数据库数据导入生成索引(DataImportHandler)-基于solr搜索引擎_solr dataimport 1000条数据-程序员宅基地

技术标签: Solr  Lucence  分布式搜索引擎  搜索引擎  

写程序可以将数据读出100条,如果你的内存够大,可以是1000条甚至更多,然后放入Collection中,批量提交至solr。或者读取数据写入xml文件中,再将该文件提交到solr等等。但是,我们还可以通过配置文件直接读取数据库建立索引。
两种方式:1)    全量更新索引  2) 增量更新索引
其中: 关于全量和增量测试报告详见以下URL: 

http://download.csdn.net/detail/shenfuli/6575533

创建索引方式
1. solr 的客户端调用solrj 建索引+分页查询
/*创建数据库测试表*/
create table DELTA_IMPORT
(
  ID            NUMBER(15) not null,
  WARECODE      VARCHAR2(500),
  WARENAME      VARCHAR2(500),
  WARE_STATUS   VARCHAR2(500),
  LAST_MODIFIED DATE
)
新增测试数据

2. solr从数据库建立索引
Index a DB table directly into Solr
Step 1 : Edit your solrconfig.xml to add the request handle
  <!-- DataImportHandler -->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
     <lst name="defaults">  
        <str name="config">D:/Dev/appservers/solr_server/webapps/solr/db/db-config.xml</str>  
     </lst>  
  </requestHandler>

Step 2 : Create a data-config.xml file as follows and save it to the conf dir
<dataConfig>
         <dataSource type="JdbcDataSource"
                     driver="oracle.jdbc.driver.OracleDriver"
                     url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
                     user="ngves3"
                     password="asiainfo"/>
          <document name="full_import" pk="ID">
             <entity name="fullImport"
                     transformer="ClobTransformer"
                     query="select * from delta_import" >
                     <field column="ID" name="id" />
                     <field column="wareCode" name="wareCode"/>
                     <field column="wareName" name="wareName" />
                     <field column="wareStatus" name="wareStatus" />
             </entity>
       </document>
</dataConfig>
Step 3 : Ensure that your solr schema (schema.xml) has the fields 'id', 'TITLE', 'CONTENT','SENDTIME'. Change the appropriate details in the data-config.xml

Step 4: Drop your JDBC driver jar file into the <solr-home>/lib directory

Step 5 : Run the command
http://solr-host:port/solr/dataimportcommand=full-import
Keep in mind that every time a full-import is executed the index is cleaned up. If you do not wish that to happen add clean=false. For example:
http://solr-host:port/solr/dataimportcommand=full-import&clean=false





Index data from multiple tables into Solr
Step: 1 Change the data-config as follows :
Step 2: The schema.xml should have the solr_details field
Step 3: Run the full-import command


访问地址: http://192.168.204.135:9081/solr/admin/dataimport.jsp
第一种情况:
full-import : "完全导入"这个操作可以通过访问URL http://192.168.0.248:9080/solr/dataimportcommand=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 )

编写JAVA程序模拟    http://192.168.204.135:9081/solr/dataimport?clean=true&commit=true&command=full-import
1. 配置文件:
<dataConfig>
         <dataSource type="JdbcDataSource"
                                         driver="oracle.jdbc.driver.OracleDriver"
                                         url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
                                         user="ngves3"
                                         password="asiainfo"/>
         <document name="full_import" pk="ID">
         <entity name="fullImport"
                                 transformer="ClobTransformer"
                                 query="select * from delta_import" >
             <field column="ID" name="id" />
             <field column="wareCode" name="wareCode"/>
             <field column="wareName" name="wareName" />
             <field column="wareStatus" name="wareStatus" />
         </entity>
     </document>
</dataConfig>
2. 测试代码
public void testFullImportByHttpClient() throws Exception{
        
        logger.info("start create index from db!");
        
        String result = null;
        String urlAddr = null;
        Map<String, String> param = null;
        try {
            
            urlAddr = "http://192.168.204.135:9081/solr/dataimport";
            param = new HashMap<String, String>();
            param.put("clean", "true");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
            param.put("commit","true");//commit设置true后,才会真正更新索引索引库
            param.put("command","full-import");
            result = HttpHelper.doPost(urlAddr, param);
            if(logger.isInfoEnabled()){
                logger.info("result = " + result);    
            }
            logger.info("success create index!");
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
第二种情况:
delta-import : 当遇到一些增量的输入,或者发生一些变化时使用http://192.168.0.248:9080/solr/dataimport?command=delta-import它同样支持  clean, commit, optimize and debug 这几个参数
1. 配置文件
<dataConfig>
         <dataSource type="JdbcDataSource"
                                         driver="oracle.jdbc.driver.OracleDriver"
                                         url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
                                         user="ngves3"
                                         password="asiainfo"/>

         <document name="delta_import" >
                         <entity name="deltaImport" pk="ID"
                                         transformer="ClobTransformer"
                                         query="select * from delta_import"
                                         deltaQuery="select id from delta_import where
                                         to_char(last_modified,'YYYY-MM-DD HH24:MI:SS') > '${dataimporter.last_index_time}'">
                                 <field column="ID" name="id" />
                                 <field column="wareCode" name="wareCode"/>
                                 <field column="wareName" name="wareName" />
                                 <field column="wareStatus" name="wareStatus" />
                         </entity>
        </document>
</dataConfig>
2. 测试代码
public void testDeltaImportByHttpClient() throws Exception{
        
        logger.info("start create index from db!");
        
        String result = null;
        String urlAddr = null;
        Map<String, String> param = null;
        try {
            
            urlAddr = "http://192.168.204.135:9081/solr/dataimport";
            param = new HashMap<String, String>();
            param.put("clean", "false");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
            param.put("commit","true");//commit设置true后,才会真正更新索引索引库
            param.put("command", "delta-import");//增量创建索引
        
            result = HttpHelper.doPost(urlAddr, param);
            if(logger.isInfoEnabled()){
                logger.info("result = " + result);    
            }
            logger.info("success create index!");
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
第三种情况:
status : 想要知道命令执行的状态 , 访问 URL http://192.168.0.248:9080/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况

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

第五种情况:
abort : 你可以通过访问 http://192.168.0.248:9080/solr/dataimport?command=abort 来终止一个在运行的操作



文本来自: http://www.cnblogs.com/atyou/archive/2013/04/19/3031323.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenfuli/article/details/16821813

智能推荐

2021.2.10记一次极路由3HC5861无ROOT刷机登录ssh的经历_极路由3 ssh-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏20次。2021.2.10记一次极路由3HC5861无ROOT刷机登录ssh的经历今天朋友拿来一个极路由3HC5861,说因为云市场关闭,想刷机,结果在刷不死breed的时候输错了命令,刷错了分区,本来应该是u-boot分区,正确命令如下mtd -r write /tmp/breed-mt7620-hiwifi-hc5861.bin u-boot不小心,输错了,输入了mtd -r write /tmp/breed-mt7620-hiwifi-hc5861.bin firmware结果无法使用了,不死bre_极路由3 ssh

Unity 3D WebView 插件之CanvasWebViewPrefab API解析(五)-程序员宅基地

文章浏览阅读1.4k次。核心模块:CanvasWebViewPrefab​CanvasWebViewPrefab 是一个预制件,可以轻松地在 2D Canvas 中查看 IWebView 并与之交互。它负责创建 IWebView、显示其纹理以及处理来自用户的指针交互,如单击、拖动和滚动。因此,您需要做的就是指定要加载的URL或HTML,然后用户可以查看并与之交互。若要在画布外部使用,请改为 WebViewPrefab。若要在画布外部使用,请改为 WebViewPrefab。_canvaswebviewprefab

TCP流量控制和拥塞控制机制_tcp的流量控制和拥塞控制机制是什么-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏10次。TCP流量控制和拥塞控制机制cwnd:发送端窗口( congestion window ),拥塞窗口大小rwnd:接收端窗口(receiver window),与接受方的TCP数据报缓冲区大小有关实际发送窗口大小= Min [ rwnd, cwnd ]当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。当cwnd < rwnd 时,则是网络的拥塞限制发送方..._tcp的流量控制和拥塞控制机制是什么

公证人机制_多重签名公证人的局限性-程序员宅基地

文章浏览阅读963次,点赞2次,收藏3次。公证人机制引入一方或多方可信实体做信用背书的跨链机制公证人机制是技术上可实现的,最简单的跨链机制实现方式单签名公证人机制,即一个节点做公证人多签名公证人机制,即多个节点利用多签名机制做公证人组分布式签名公证人机制,指多个公证人持有一份密钥的碎片,密钥碎片随机发给公证人瑞典的InterLeger协议中原子模式的实现方式是典型的公证人机制在InterLeger协议中,包括发送者,连接者,接收者,和公证人等角色。发送者把资产转给公证人组多签地址进行资产托管接收者确认收到转账后在收据后签_多重签名公证人的局限性

高通源码下载2----用从高通下载的repo_repo 高通源码-程序员宅基地

文章浏览阅读7.2k次,点赞5次,收藏17次。紧接 上一篇源码下载,上一篇用一网上公用的repo,本篇用高通下的repo. 1、高通repo源,经过验证。git clone git://codeaurora.org/tools/repo.git2、拷贝repo 到~/bin下面,并将repo权限更改过来, chmod a+x ~/bin/repo3、下载源码repo init -u git://codeaurora.org/platform_repo 高通源码

一种破解静态链接库(.lib)的简单方法_c++中的lib文件可以反向得到源码么-程序员宅基地

文章浏览阅读1.6w次。一种破解静态链接库(.lib)的简单方法 作者:游蓝海 博客:http://blog.csdn.net/you_lan_hai 最近,在研究某代码时,遇到这样一个问题:整个解决方案中,有一个工程没有cpp源码,只有头文件跟一个静态链接库,虽然整个程序可以编译通过,但是lib文件中做了一些时间限制,导致程序启动的时候会弹出一个messagebox,提示工程过期,然后_c++中的lib文件可以反向得到源码么

随便推点

Vue表单自动计算(computed)_vue computed 计算form下的一个值-程序员宅基地

文章浏览阅读5.2k次。项目中需要通过实时计算出表单值,作为vue小白记录下参考博文前辈们的博文:watch和computed用法.过滤NaN值.js代码:computed: { c: function () { // 定义并且给c赋值 return parseInt(this.form.a) + parseInt(this.form.b) } }数据form: { a: '', b: '' },计算c=a+b这里可以_vue computed 计算form下的一个值

PyTorch利用多GPU训练深度学习网络_利用pytorch 多gpu进行深度学习训练-程序员宅基地

文章浏览阅读2k次。PyTorch深度学习框架可以利用GPU加速网络训练,网络太深,参数太多的话,很可能在利用GPU训练网络的时候导致GPU显存不够,无法继续训练。GPU的显存大小几乎与其价格成正比,显存越大,也就越贵。但是为了利用GPU训练深度学习网络模型,可能需要大显存的显卡,比如直接买一个1080ti,显存为11G,但是也可以退而求其次,买两个1070ti,总显存为16G,似乎更划算。那么,单机多卡(一台机器配..._利用pytorch 多gpu进行深度学习训练

前端系列课程之计算属性&侦听器和自定义指令(一)_计算属性 返回自身命令-程序员宅基地

文章浏览阅读146次。计算属性&侦听器和自定义指令目标:掌握计算属性的应用掌握监听器的应用掌握自定义指令的应用计算属性为什么需要计算属性?(1)模板语法可以使用表达式,但是不便于实现复杂的业务逻辑功能,也不利于维护如何对绑定的title倒序?例子:(倒序)或者:(2)计算属性可以解决模板语法的缺点, 完成复杂的逻辑,便于代码维护。计算属性的语法:计算属性通过computed选项进行设置,以函数的方式实现业务功能,需要返回一个结果。计算属性和方法的区别:_计算属性 返回自身命令

数学物理方法·基础篇-学习主要内容_数学物理方法学习-程序员宅基地

文章浏览阅读978次。数学物理方法·基础篇-学习主要内容 QQ:3020889729 小蔡数学物理方法·发展学习体系结构学习的应用思路参考书目: QQ:302088..._数学物理方法学习

tensorflow实战(四)——过拟合调参(1)及Colab的GPU使用达到限额_colab限额多久恢复-程序员宅基地

文章浏览阅读2.6k次。通过Tensorflow实战(三)——解决Google colab 自动掉线问题,我解决了GPU经常被自动卸载的问题,非常开心,于是去找我的Missile测试代码去了。找完回来,准备训练,突然傻眼了,显示GPU使用已经达到了限额,在网上查了一下,别人说要过24小时后才能在此使用,太难了,我只能用CPU缓慢的进行训练了。训练配置我将random_state改为1,以此保持训练集与测试集为固定的,使用控制变量法优化超参数(x_train, x_test, y_train, y_test) = train_colab限额多久恢复

vue项目的打包优化_vue 三种打包模式不够用怎么办-程序员宅基地

文章浏览阅读1.7k次。1、首先打vue ui控制面板找到项目文件,点击任务进入之后点击start编译和热更新(用于开发环境)运行这个项目**2、在没有报警告的情况下,去点击build编译并压缩(用于生产环境)进行打包**3、js/chunk-vendors.bb76b22d.js和element-ui的文件过大所以需要对其进行优化1.通过 vue-cli 3.0 工具生成的项目,默认隐藏了所有 webpack 的配置项,如果程序员有修改 webpack 默认配置的需求,可以在项目根目录中,按需创建 vue.con_vue 三种打包模式不够用怎么办

推荐文章

热门文章

相关标签