七、Dataimport

七、Dataimport

可以使用Solr自带的Dataimport功能把数据库中数据快速导入到solr中.

必须保证managed-schema和数据库中表的列对应。

1.修改配置文件

修改solrconfig.xml,添加下面内容

 <!-- 配置数据导入的处理器 -->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <!--  加载data-config.xml  -->
      <str name="config">data-config.xml</str>
     </lst>
  </requestHandler>

2.新建data-config.xml

和solrconfig.xml同一目录下新建data-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
        <dataSource type="JdbcDataSource"   
                driver="com.mysql.jdbc.Driver"   
                url="jdbc:mysql://10.10.83.241:3306/mashibing"   
                user="root"   
                password="root"/>
        <document>
            <entity name="product" query="SELECT id,name,price from t_product">
                <!-- 
                 实现数据库的列和索引库的字段的映射
                 column 指定数据库的列表
                 name  指定索引库的字段名字,必须和schema.xml中定义的一样
                 -->
                 <field column="id" name="id"/>
                 <field column="name" name="name"/>
                 <field column="price" name="price"/>
            </entity>
         </document>
</dataConfig>

3.添加jar

向solr-webapp中添加三个jar。在dist中两个还有一个数据库驱动。

4.操作

重启solr后,在可视化管理页面中进行数据导入。

注意:

点击导入按钮后,要记得点击刷新按钮。

八、菜单项目Documents使用办法

以XML格式举例

1.新增/修改

当id不存在时新增,当id存在修改。

<doc>
<field name="id">8</field>
<field name="name">明天更大卖</field>
<field name="price">98</field>
</doc>

2.删除

2.1根据主键删除

<delete>
    <id>8</id>
</delete>
<commit/>

2.2根据条件删除

<delete>
    <query>*:*</query>
</delete>

九、使用SolrJ操作Solr

SolrJ是Solr提供的Java客户端API。通过SolrJ可以实现Java程序对Solr中数据的操作。

大前提:添加SolrJ依赖。依赖版本和Solr版本严格对应

<dependencies>
    <dependency>
        <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
        <version>7.7.2</version>
    </dependency>
</dependencies>

1.新增/修改实现

String url = "http://192.168.93.10:8983/solr/testcore";
HttpSolrClient solrClient =  new HttpSolrClient.Builder(url).build();
SolrInputDocument inputDocument = new SolrInputDocument();
inputDocument.addField("id","3");
inputDocument.addField("myfield","myfield3");
solrClient.add(inputDocument);
solrClient.commit();

2.删除实现

String url = "http://192.168.93.10:8983/solr/testcore";
HttpSolrClient solrClient =  new HttpSolrClient.Builder(url).build();
solrClient.deleteById("3");
solrClient.commit();

3.查询实现

public void testQuery(){
    try {
        String url = "http://192.168.93.10:8983/solr/testcore";
        HttpSolrClient solrClient = new HttpSolrClient.Builder(url).build();
​
        //封装了所有查询条件
        SolrQuery params = new SolrQuery();
        params.setQuery("name:丰富的");
        //排序
        params.setSort("price", SolrQuery.ORDER.desc);
        //分页
        params.setStart(0);
 params.setRows(1);
        //高亮
        params.setHighlight(true);
        params.addHighlightField("name");
        params.setHighlightSimplePre("<span>");
        params.setHighlightSimplePost("</span>");
​
        QueryResponse response = solrClient.query(params);
        SolrDocumentList list = response.getResults();
        System.out.println("总条数:"+list.getNumFound());
​
        //高亮数据
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
​
        for(SolrDocument doc :list){
            System.out.println(doc.get("id"));
            Map<String, List<String>> map = highlighting.get(doc.get("id"));
            List<String> HLList = map.get("name");
            if(HLList!=null&&HLList.size()>0){//显示高亮数据
                System.out.println(HLList.get(0));
            }else{
                System.out.println(doc.get("name"));
            }
            System.out.println(doc.get("price"));
            System.out.println("===================");
        }
        solrClient.close();
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值