solr使用

下载solr程序压缩包

 

solr常用命令:

solr start –p 端口号      启动solr服务

solr restart –p 端口号  重启solr服务

solr stop –p 端口号     关闭solr服务

进入到solr的bin目录,solr start -p 端口。指定端口启动solr

 

删除全部索引    <delete><query>*:*</query></delete><commit/>

访问页面如下

 

solr创建core

在控制台,solr create -c 名称

我这里是,solr create -c iscreamv2

 

进入到server目录下的solr目录下,将发现创建的iscreamv2的core,创建这个有什么用?

 

选择这个core可以将数据存储在这个core中,我有尝试两种办法添加数据

 

第一种办法:

手动添加数据

 

第二种办法,连接数据,将数据库内容导入在solr的core iscreamv2的容器中

 

如何连接数据库,将数据放进去?

进入到solr创建的core中,需要编辑的文件已经列出来了

 

编辑第一个文件,solrconfig配置文件,添加如下代码:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
        <str name="config">data-config.xml</str>
      </lst>
</requestHandler>

比较重要的是添加了一个xml文件data-config.xml,这个文件是我们自己创建的,这个xml放什么?

这个文件来,配置数据源与数据库表的实体

 

如下;

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?charactorEncoding=utf-8&amp;serverTimezone=UTC" user="root" password="514236" />
    <!--
    <document name="test1">
        <entity name="test" query="select * from enginedata" pk="eid">
             <field column="eid" name="eid" />
             <field column="longtime" name="longtime" />
        </entity>
    </document>
    -->
    
    <document name="test_1mil_data">
        <entity name="test_1mil_data" query="select * from test_1mil_data" pk="eid">
             <field column="oid" name="oid" />
             <field column="otime" name="otime" />
             <field column="ophone" name="ophone" />
             <field column="oprice" name="oprice" />
             <field column="otype" name="otype" />
             <field column="ozk" name="ozk" />
             <field column="ostatus" name="ostatus" />
             <field column="oaddress" name="oaddress" />
             <field column="oyys" name="oyys" />
        </entity>
    </document>
    
    
</dataConfig>

 

上面是数据源的配置,在entity 中是配置一个个表格的实体,表的列明与取的别名,里面有个sql语句是: query="select * from test_1mil_data"

 

这里是意思应该是,查询出表格所有数据,这个应该就是最终录入solr容器的数据。可以多配置几个,配置表格实体,执行sql获得数据。

 

找到managed-schema配置数据库的地方,再次配置一次,这个配置是给solr看的

 

<fields>
        <field name="oid" type="plong" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="otime" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="ophone" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="oprice" type="plong" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="otype" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="ozk" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="ostatus" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="oaddress" type="string" indexed="true" stored="true" required="true" multiValued="false" />
        <field name="oyys" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    </fields>

indexed增加索引,name名称。等等

 

步骤是,config指明我们的xml,我们的xml配置数据源与表实体,里面配置query语句,是数据的来源。在scheam中配置字段给solr看。一个是告诉xml,一个指定数据源,一个是配置给solr看

 

经过这个三个步骤后

进入solr-webapp中,录入jar包进去,一个是mysql的jar,另外两个哪里找呢?

 

在他的目录下是由的,不确定在哪个目录了,在solr的文件中是含有这两个jar的

 

到这里就ok了,下面是连接数据库,将数据录入进去,

启动solr:solr start -p 8081

连接上solr,选择到我们创建的core,选择dataimport数据引入,选择我们mxl中配置的实体,也就是表格。clert的意思是,每次导入数据时,会先清除以前老的数据,可以不选择。选择execute执行。就会连接数据库,将数据导入在solr中

 

里面也有刷新按钮,当数据很大时,可以导入一会,刷新看看导入的情况

 

下面是java代码对solr的操作:

jar引入:

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

 

 

 

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

import java.io.IOException;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;

public class SolrConnect {

    public String baseUrl = "http://localhost:8081/solr/iscreamv2";
    public final SolrClient server = new HttpSolrClient.Builder(baseUrl).build();

//查询,solr默认是只查固定行数据,往后就不查了,可以设置。这样就是有多少查询多少数据出来

    //Query
    @Test
    public void QueryTest() throws IOException, SolrServerException {
        SolrQuery query = new SolrQuery("ophone:123abc123");

        //        设置从哪里->哪里查
        //                query.setStart(0);
        //                query.setRows(10000);

        //        默认solr只查10行,设置吐出来的最多纪录
        query.set("rows", Integer.MAX_VALUE);
        //        System.out.println("Max Result= "+Integer.MAX_VALUE);
        QueryResponse resp = server.query(query);
        System.out.println("solr Result Number= "+resp.getResults().size());
        System.out.println("solr Result Time= " + resp.getQTime());
        System.out.println("solr Result Time= " + resp.getElapsedTime());
    }

    //add
    @Test
    public void addTest() throws IOException, SolrServerException {
        SolrClient solr = new HttpSolrClient.Builder(baseUrl).build();
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "123456789");
        document.addField("name", "MyIScream");
        document.addField("content", "solr是个一个Apache搜索引擎");
        solr.add(document);
        solr.commit();
    }


    //delete
    @Test
    public void deleteTest() throws SolrServerException, IOException {
        SolrClient solr = new HttpSolrClient.Builder(baseUrl).build();
        UpdateResponse ur = solr.deleteById("123456789");    //id  按id删除
        UpdateResponse c = solr.commit();
        System.out.println(c);
    }

    //update
    @Test
    public void updateSTest() throws SolrServerException, IOException {
        SolrClient solrServer = new HttpSolrClient.Builder(baseUrl).build();
        SolrInputDocument solrInputDocument = new SolrInputDocument();
        //唯一标识 id
        solrInputDocument.addField("id", "71333674-9403-439a-9af0-75b0c20149f0");

        //更新字段1
        Map<String, String > operation = new HashMap();
        operation.put("set", "54");
       //更新字段2
        Map<String, String > operation1 = new HashMap();
        operation1.put("set", "55");

        //添加要更新的字段,添加map进行,一个map一个字段,添加进行进行改动
        solrInputDocument.addField("eid",operation);
        solrInputDocument.addField("longtime",operation1);

        solrServer.add(solrInputDocument);
        solrServer.commit();
    }


update改的表,没办法一次就改完,每个字段一个map录入进去进行改变

    @Test
    public void getConnection() throws SQLException {
        Connection root = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test?charactorEncoding=utf-8&serverTimezone=UTC",
                "root",
                "514236");
        Statement statement = root.createStatement();
        long sys = System.currentTimeMillis();
        ResultSet resultSet = statement.executeQuery("SELECT * FROM test_1mil_data WHERE ophone='123abc123'");
        resultSet.last();
        System.out.println(resultSet.getRow());
        System.out.println("jdbc耗时: "+(System.currentTimeMillis()-sys));
    }
}

 

查询但个效率比较:

jdbc1.3s

solr 300ms

返回20w个数据比较:

jdbc:3s

solr:8s

solr查询只花700ms,8s-700ms就是整个传输和读取的过程。传输比较耗时,查询比较快

 

此处为1千万行测试数据

 

里面含有,对solr的增删改查,常用的是查询,比较麻烦的是改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值