全文搜索技术——Solr与solrj使用教程

来源:互联网 发布:naca64翼型数据 编辑:程序博客网 时间:2024/05/15 01:59

solr详细配置与使用教程:点击下载

总结一下solrj的使用完整源码下载地址:点击下载

1. Solr安装及配置

1.1. Solr的下载

Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgzwindows下需要下载lucene-4.10.3.zip

Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。

1.2. Solr的文件夹结构

solr-4.10.3.zip解压:

 

 

binsolr的运行脚本

contribsolr的一些软件/插件,用于增强solr的功能。

dist:该目录包含build过程中产生的warjar文件,以及相关的依赖文件。

docssolrAPI文档

examplesolr工程的例子目录:

l example/solr:

该目录是一个包含了默认配置信息的SolrCore目录。

l example/multicore

该目录包含了在Solrmulticore中设置的多个Core目录。

l example/webapps:

    该目录中包括一个solr.war,该war可作为solr的运行实例工程。

licensessolr相关的一些许可信息

1.3. 运行环境

solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jettyjava写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下:

 

SolrSolr4.10.3

Jdkjdk1.7.0_72

Tomcatapache-tomcat-7.0.53

1.1.1. 整合步骤

第一步:安装tomcatD:\temp\apache-tomcat-7.0.53

第二步:把solrwar包复制到tomcatwebapp目录下。

\solr-4.10.3\dist\solr-4.10.3.war复制到D:\temp\apache-tomcat-7.0.53\webapps下。

改名为solr.war
第三步:solr.war解压。使用压缩工具解压或者启动tomcat自动解压。解压之后删除solr.war

第四步:把\solr-4.10.3\example\lib\ext目录下的所有的jar包添加到solr工程WEB-INF\lib中

第五步:配置solrHomesolrCore

1)创建一个solrhome(存放solr所有配置文件的一个文件夹)。\solr-4.10.3\example\solr目录就是一个标准的solrhome

2)\solr-4.10.3\example\solr文件夹复制到D:\temp\0108路径下,改名为solrhome,改名不是必须的,是为了便于理解。

3)solrhome下有一个文件夹叫做collection1这就是一个solrcore。就是一个solr的实例。一个solrcore相当于mysql中一个数据库。Solrcore之间是相互隔离。

i. solrcore中有一个文件夹叫做conf,包含了索引solr实例的配置信息。

ii. conf文件夹下有一个solrconfig.xml。配置实例的相关信息。如果使用默认配置可以不用做任何修改。

Xml的配置信息:

Libsolr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有  就创建一个

dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如data文件夹,会自动创建。

requestHandler

 

 

第六步:告诉solr服务器配置文件也就是solrHome的位置。修改web.xml使用jndi的方式告诉solr服务器。

Solr/home名称必须是固定的。

 

第七步:启动tomcat

第八步:访问http://localhost:8080/solr/



package cn.itcast.solr;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.common.SolrInputDocument;import org.junit.Test;public class IndexManagerTest {@Testpublic void testIndexCreate() throws Exception{//创建和Solr服务端连接SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");//创建solr文档对象SolrInputDocument doc = new SolrInputDocument();//域要先定义后使用,还有注意必须要有id主键域//solr中没有专用的修改方法, 会自动根据id进行查找,如果找到了则删除原来的将新的加入就是修改,如果没找到,将新的直接加入则就是新增doc.addField("id", "a001");doc.addField("product_name", "台灯1`111");doc.addField("product_price", "12.5");//将文档加入solrServer对象中solrServer.add(doc);//提交solrServer.commit();}@Testpublic void testIndexDel() throws Exception{//创建和Solr服务端连接SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");//根据主键id进行删除//solrServer.deleteById("a001");//根据查询删除,这里是删除所有*:*solrServer.deleteByQuery("*:*");//提交solrServer.commit();}}

===============================================

package cn.itcast.solr;import java.util.List;import java.util.Map;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.junit.Test;public class IndexSearchTest {@Testpublic void testIndexSearch1() throws Exception{//连接solr服务端SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");//创建solr查询条件对象SolrQuery solrQuery = new SolrQuery();//查询所有solrQuery.setQuery("*:*");//查询并获取查询响应对象QueryResponse queryResponse = solrServer.query(solrQuery);//从查询响应中获取查询结果集对象SolrDocumentList results = queryResponse.getResults();//打印一共查询到多少条记录,也就是记录总数System.out.println("=====count====" + results.getNumFound());//遍历查询结果集for(SolrDocument doc : results){System.out.println("============="+doc.get("id"));System.out.println("============="+doc.get("product_name"));System.out.println("============="+doc.get("product_price"));System.out.println("====================================================");}}@Testpublic void testIndexSearch2() throws Exception{//连接solr服务端SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");//创建solr查询条件对象SolrQuery solrQuery = new SolrQuery();//查询关键字输入solrQuery.setQuery("台灯");//设置默认搜索域solrQuery.set("df", "product_keywords");//设置过滤查询solrQuery.addFilterQuery("product_price:[1 TO 100]");//设置排序,这里是降序solrQuery.setSort("product_price", ORDER.desc);//=======设置分页========//设置起始条数solrQuery.setStart(0);//设置查询多少条solrQuery.setRows(50);//========设置高亮显示=======//高亮默认是关闭的,所以要手动开启solrQuery.setHighlight(true);//设置需要高亮显示的域solrQuery.addHighlightField("product_name");//设置高亮前缀solrQuery.setHighlightSimplePre("<span style=\"color:red\">");//设置高亮后缀solrQuery.setHighlightSimplePost("</span>");//===================查询并获取查询响应对象=====================================QueryResponse queryResponse = solrServer.query(solrQuery);//从查询响应中获取查询结果集对象SolrDocumentList results = queryResponse.getResults();//打印一共查询到多少条记录,也就是记录总数System.out.println("=====count====" + results.getNumFound());//遍历查询结果集for(SolrDocument doc : results){System.out.println("============="+doc.get("id"));//获取高亮Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();List<String> list = highlighting.get(doc.get("id")).get("product_name");if(list != null && list.size() > 0){String hlName = list.get(0);System.out.println("=======high lighting=====" + hlName);}System.out.println("============="+doc.get("product_name"));System.out.println("============="+doc.get("product_price"));System.out.println("====================================================");}}}

不明白详细参考博客



1 0
原创粉丝点击