solr入门(基础程序)

//本例使用的是4.10.2的版本为入门
java -jar start.jar 
启动solr

访问http://localhost:8983/solr/
这里写图片描述

服务启动后,里面没有任何数据,我们需要添加一些测试数据,通过posting命令向solr服务器添加一个xml文档,解压项目目录exampledocs中包含的文件,运行命令

java -jar post.jar solr.xml  monitor.xml

solr.xml 文件内容如下:
这里写图片描述

monitor.xml文件内容如下:

这里写图片描述

效果:
这里写图片描述

这里写图片描述

通过上面的地址我们发现,这个查询相当于一个httpget请求,也就是我们通过一个地址访问了solr服务器,访问地址就是通过查询条件拼接出来的:

http://192.168.1.100:8983/solr/select?q=name:3007WFP

访问此地址栏,结果如下:

这里写图片描述

以上就是我们使用solr的桌面客户端工具展示返回的结果,如果我们需要在程序中使用这些返回值的话,就需要另外一个工具了——solrJ。
为了方便的操作solr服务器,apache为我们提供了solrJ工具,我们可以通过solrj对solr服务器进行创建索引更新查询 、处理返回值等等操作,它其实相当于solr服务器和我们程序进行数据通信的桥梁——solrJ
使用solrJ,必须导入相应的jar包,这里推荐使用maven工具,注意使用4.0.0版本以上jar包,在pom中配置:

<dependency>    
     <artifactId>solr-solrj</artifactId>    
     <groupId>org.apache.solr</groupId>    
     <version>4.0.0</version>    
     <type>jar</type>    
     <scope>compile</scope>    
</dependency>

下面就开始solrj之旅。
重要的对象介绍:

1、HttpSolrServer:此对象用于连接solr服务器。所有的对solr服务器进行CRUD都需要此对象玩好呢个,我们可以说它就是solr客户端的核心对象。
2、SolrQuery:用于封装查询条件,我们可以将我们的查询条件包括分组、排序等全部封装到这个对象中,然后由HttpSolrServer对象来执行查询对象。
3、QueryResponse:这个对象就是对response对象的封装,是用来封装返回值的,我们可以通过这个对象的getResults()方法得到solr服务器的返回数据。
4、SolrDocumentList:这是一个集合对象,是solr服务器对象QueryResponsegetResults()方法返回的对象,类似jdbc中的ResultSet对象,我们可以得到我们想要的结果,通过一次简单的迭代就可以。

实现:
a)连接服务器,使用HttpSolrServer连接服务器
String url = "http://192.168.1.100:8983/solr";  
HttpSolrServer server  = new HttpSolrServer(url);  

server.setSoTimeout(3000); // socket read timeout  
server.setConnectionTimeout(1000);  
server.setDefaultMaxConnectionsPerHost(1000);  
server.setMaxTotalConnections(10);  
server.setFollowRedirects(false); // defaults to false  
server.setAllowCompression(true);  
server.setMaxRetries(1);  
实现:
b)清空现有的索引 deleteByQuery
try {  
        server.deleteByQuery("*:*");  
    } catch (SolrServerException e1) {  
        e1.printStackTrace();  
    } catch (IOException e1) {  
        e1.printStackTrace();  
    } 
实现:
c)构造索引 SolrInputDocument
    //构造document1  
    SolrInputDocument doc1 = new SolrInputDocument();  
    doc1.addField( "id", "id1", 1.0f );  
    doc1.addField( "name", "doc1", 1.0f );  
    doc1.addField( "price", 10 );  


    //构造document2  
    SolrInputDocument doc2 = new SolrInputDocument();  
    doc2.addField( "id", "id2", 1.0f );  
    doc2.addField( "name", "doc2", 1.0f );  
    doc2.addField( "price", 20 );  


    //构造document集合  
    Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();  
    docs.add(doc1);  
    docs.add(doc2);  


    //将documents集合 提交给httpSolrServer  
    try {  
        server.add(docs);  
    } catch (SolrServerException e1) {  
        e1.printStackTrace();  
    } catch (IOException e1) {  
        e1.printStackTrace();  
    }  

    //提交一个commit(方法一)  
    try {  
        server.commit();  
    } catch (SolrServerException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
实现:
d)设置查询条件 SolrQuery
//设置查询条件  
SolrQuery query = new SolrQuery();  
query.setQuery("*:*");  
query.addField("name");  
query.setStart(0);  
query.setRows(4);  
query.addSortField("id", SolrQuery.ORDER.desc);  
//query.addSortField("auction_point", SolrQuery.ORDER.asc); 
实现:
e)处理查询结果 QueryResponseSolrDocumentList(相当于JDBC的ResultSet对象,迭代结果):
//处理查询结果  
QueryResponse qrsp = null;  
try {  
    qrsp = server.query(query);  
} catch (SolrServerException e) {  
    e.printStackTrace();  
}    
       SolrDocumentList docsT = qrsp.getResults();  
       Iterator i = docs.iterator();  
       while(i.hasNext()){  
               System.out.println(i.next());  
       } 

运行结果:
这里写图片描述

以上就是简单的入门程序。

我们使用solr作为全文索引的服务器,那么必须要为solr提供数据源,solr服务器总结了三种数据源,分别是:
:A )使用命令提供数据源
:B )SolrJ提供数据源
:C )配置文件配置数据源
下面分别介绍这三种方式:

一)使用命令配置数据源:
1 环境
本文以linux环境作为示例介绍此功能,操作环境centOS。
2 数据源
以现有的,Apache官方demo提供的XML文件作为示例数据源。
3 实现

java -jar post.jar solr.xml monitor.xml

monitor数据

这里写图片描述
4 测试结果:
这里写图片描述

一)使用solrJ配置数据源:
1 环境
使用HttpSolrServer对象,需要引入solr-solrj-4.0.0.jar文件。
2 数据源
我们直接构造SolrInputDocument对象作为solr引擎的数据源。
3 实现

String url = "http://192.168.22.216:8983/solr";    
HttpSolrServer server  = new HttpSolrServer(url);    
    server.setSoTimeout(3000); // socket read timeout    
    server.setConnectionTimeout(1000);    
    server.setDefaultMaxConnectionsPerHost(1000);    
    server.setMaxTotalConnections(10);    
    server.setFollowRedirects(false); // defaults to false    
    server.setAllowCompression(true);    
    server.setMaxRetries(1);    
//构造document1    
SolrInputDocument doc1 = new SolrInputDocument();    
                    doc1.addField( "id", "id1", 1.0f );    
                    doc1.addField( "name", "doc1", 1.0f );    
                    doc1.addField( "price", 10 );     
//构造document2    
SolrInputDocument doc2 = new SolrInputDocument();    
                    doc2.addField( "id", "id2", 1.0f );    
                    doc2.addField( "name", "doc2", 1.0f );    
                    doc2.addField( "price", 20 );      
//构造document集合    
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();    
                                docs.add(doc1);    
                                docs.add(doc2);     
//将documents提交给solr    
            try {    
                server.add(docs);    
            } catch (SolrServerException e1) {    
                e1.printStackTrace();    
            } catch (IOException e1) {    
                e1.printStackTrace();    
            }          
//提交一个commit(方法一)    
            try {    
                server.commit();    
            } catch (SolrServerException e) {    
                e.printStackTrace();    
            } catch (IOException e) {    
                e.printStackTrace();    
            }   

4 测试
这里写图片描述

三 使用配置文件配置数据源
1 环境
操作系统:centOS
数据库:MySQL
2 数据源

使用数据库的一张表作为solr服务器的数据源。
表结构如下:
这里写图片描述

3 实现
a)配置数据源:
根据 /usr/local/solr-4.7.2/example/solr/collection1/conf/目录,找到 solr-config.xml配置文件,在 <requestHandler name="/select" class="solr.SearchHandler">的前面,添加dataimport的处理handler。
 <requestHandler name="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">  
        <lst name="defaults">  
            <str name="config">data-config.xml</str>  
        </lst>  
 </requestHandler> 

这里写图片描述

说明:
此配置文件用于配置solr服务器的数据来源,即可以通过数据库获取数据源。

3 实现
b)配置数据源:
在同目录下找到 data-config.xml,如果没有则添加一个,配置如下:
    <?xml version="1.0" encoding="UTF-8"?>  
    <dataConfig>  
        <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.21.20:3306/jfinal_demo"  user="root" password="123456" batchSize="-1" />  
      <document name="testDoc">  
            <entity name="user" pk="id"  
     query="select * from user">  
                <field column="id" name="id"/>  
               <field column="userName" name="userName"/>  
                <field column="userAge" name="userAge"/>  
                <field column="userAddress" name="userAddress"/>  
         </entity>  
      </document>  
    </dataConfig>  

这里写图片描述

说明:
此配置用于配置数据库数据源,类似持久层配置文件。
dataSource用于配置服务器、数据库驱动、用户、密码等;
entity:用于配置一张表,对应一个实体,pk为主键,query为查询语句。
field:对应实体的字段,column对应数据库中的字段名称,name对应solr服务的索引名称。
3 实现
c)配置索引:
找到同目录下的schema.xml,配置如下:
(1) 保留 _version_这个field
(2) 添加索引字段:这里每个field的name都要和data-config.xml中entity的field的name一致。
<field name="userName" type="text_general" indexed="true" stored="true" />  
<field name="userAge" type="int" indexed="true" stored="true" />  
<field name="userAddress" type="text_general" indexed="true" stored="true" />  

这里写图片描述
说明:
因为id属性已经被配置过,所以这里不需要再次配置,否则重启solr服务时会报错。

(3) 删除多余的field,删除copyField中的设置,这些用不上。注意:text这个field不能删除,否则solr服务重启失败。
(4) 设置唯一主键:  <uniqueKey>id</uniqueKey>
 注意:solr服务中的索引的主键默认只支持type="String",解决办法:修改同目录下的elevate.xml,注释掉下面2行。

 如图所示:

这里写图片描述

3 实现
d)配置jar包:
拷贝 mysql-connector-java-5.1.22-bin.jar
solr-dataimporthandler-4.10.3.jar
/usr/local/solr-4.7.2\example\solr-webapp\webapp\WEB-INF\lib
一个是mysql的java驱动,
另一个在 /usr/local/solr-4.7.2\dist目录里,是 org.apache.solr.handler.dataimport.DataImportHandler所需的jar。
3 实现
e)重启solr服务:

4 测试
这里写图片描述

第一种方式简单,并且数据通常不会变化,适合初学者测试服务器使用;
第二种方式数据不确定,但是变化范围小,通常用于模拟某种情形,适用于调试程序;
第三种方式数据不确定,索引维护复杂,但是功能强大,适用于一般全文索引程序使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值