http://blog.sina.com.cn/s/blog_64dab14801013k7g.html Solr简介

Solr是一个非常流行的,高性能的开源企业级搜索引擎平台,属于Apache Lucene项目。主要功能包括强大的全文检索、结果高亮、切面检索、动态聚类、数据库整合、富文本(例如Word,PDF)的处理,以及地理信息搜索。Solr是高度可扩展的,提供分布式检索和索引复制,并为世界上众多的大型网站提供搜索和导航功能。
Solr使用Java编写,可运行于servlet容器(如Tomcat)作为一个独立的全文搜索服务器。Solr以Lucene 为核心来创建索引和进行搜索,并提供类似REST的HTTP / XML和JSON API,这些API可以在任何编程语言中使用。通过Solr强大的扩展配置可适应几乎任何类型非Java编写应用程序,同时拥有丰富的插件来扩展高级功能。

Solr特性

  • 先进的全文检索功能
  • 专为高通量的网络流量进行的优化
  • 基于标准的开放接口 - XML,JSON和HTTP
  • 综合的HTML管理界面
  • 暴露JMX接口以方便监控服务器统计
  • 可扩展性 - 有效地复制到其他Solr搜索服务器
  • 使用XML配置达到灵活性和适配性
  • 可扩展的插件体系结构

Solr使用Lucene并进行了扩展

  • 一个真正的拥有动态域(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema)
  • 对Lucene的查询语言进行了强大的扩展
  • 切面搜索和过滤
  • 地理空间信息搜索
  • 先进的,可配置的文本分析
  • 高度可配置、可扩展的缓存机制
  • 性能优化
  • 支持通过XML配置
  • 提供管理界面
  • 可监控日志记录
  • 支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution)
  • 高度可扩展的分布式搜索,片式指数在多台主机
  • JSON,XML,CSV /分隔的文本和二进制更新格式
  • 使用简单的方法即可从数据库、XML文件数据、本地磁盘、HTTP等来源获取数据
  • 基于Apache Tika对富文本进行解析和索引(PDF,WORD,HTML等)
  • Apache UIMA集成的可配置的元数据提取
  • 支持多个搜索索引

以上的介绍翻译自:http://lucene.apache.org/solr/。大概的翻译,如有错误欢迎指出。

Solr的运行

从Solr的官方网站上下载的Solr包里面有一个基于jetty的示例运行环境。下载Solr包,打开里面的example目录,点击里面的start.jar。在浏览器里面输入http://localhost:8983/solr,可以看到如下界面。

以上是Solr管理控制台的主页,左边是导航。可以使用http://localhost:8983/solr/#/collection1/query进行查询结果的查看。这里提供的是一个方便示例界面。现在应该是没有数据的,因为没有向里面添加索引。可以使用solr提供的post.jar包进行简单的索引添加。这里不再介绍此方法,后面使用Solrj进行操作。具体的可以查看Solr目录下面的/docs/tutorial.html文档。

在Tomcat中部署Solr

上面的运行是Solr默认绑定的一个jetty,如果需要在tomcat中运行solr,方法如下:

1、将Solr/dist/apache-solr-4.0.0.war此war包复制到tomcat的webapps目录下面,并重命名成solr。

2、点击tomcat/bin/startup.bat运行tomcat,这时tomcat会解压solr.war包到webapps目录下面。看到控制台里面会有报错提示,是找不到solr的实例运行环境。这时关闭tomcat。

3、删除webapps目录下面的solr.war包。将下载的solr目录下面的example下面的solr目录复制到tomcat的webapps/solr下面。下面的目录结构大概是这样的webapps/solr/solr/collection1类似这样的。

4、打开webapps/solr/WEB-INF/web.xml文件,在里面添加如下内容。env-entry-value这个目录是指向上一个步骤中的目录。这里使用的是相对目录(相对于tomcat的bin目录),也可以使用绝对路径,如d:/solr等。步骤3中的目录不一定要位于tomcat中,只要此步骤中将路径配置正确即可。


<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>../webapps/solr/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

5、再次运行tomcat,输入http://localhost:8080/solr即可访问在tomcat中运行的solr环境。

使用Solrj操作Solr

从上面的步骤中可以看出Solr提供了一个企业搜索引擎平台的核心,可以通过他的接口进行索引的创建、修改、删除。并提交关键字进行搜索。但如果要真正的投入使用,还是有不和工作需要做,如:

1、对向Solr提交索引进行一定的封装以方便业务系统进行操作

2、对搜索进行封装,以方便结果的展现分析等等。

Solrj是使用java编写的一个操作Solr的工具,方便于进行索引的更新、搜索结果的获取等等。

在Solr的发布包里面有Solrj的相关jar包。Solrj需要的jar包为:

apache-solr-solrj-4.0.0.jar和他的依赖包solr/dist/solrj-lib

如果是使用maven,可以添加:


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

使用Solrj更新索引

使用Solrj是首先我们实例化一个SolrServer,这里使用HttpSolrServer。我们再创建一个SolrInputDocument以方便来添加要索引的数据。这里的Field是在\solr\solr\collection1\conf\schema.xml里面定义的,如果里面没有定义的字段在这里是不能添加的,除非是使用动态字段。示例代码如下:

String url = "http://localhost:8080/solr";
SolrServer server = new HttpSolrServer(url);
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", "1");
doc1.addField("title", "云南xxx科技");
doc1.addField("cat", "企业信息门户,元数据,数字沙盘,知识管理");
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField("id", "2");
doc2.addField("title", "胡启稳");
doc2.addField("cat", "知识管理,企业信息门户,云南,昆明");
SolrInputDocument doc3 = new SolrInputDocument();
doc3.addField("id", "3");
doc3.addField("title", "liferay");
doc3.addField("test_s", "这个内容能添加进去么?这是动态字段呀");
List docs = new ArrayList();
docs.add(doc1);
docs.add(doc2);
docs.add(doc3);
server.add(docs);
server.commit();

到此就添加了三个document到solr的索引库里面。下面介绍如何进行搜索。

使用Solrj进行搜索

搜索的第一步和上面一样,先取得一个SolrServer。然后创建一个SolrQuery进行搜索,搜索取得的数据已经封装在QueryResponse里面,通过相关API获取结果数据。示例代码如下:

String url = "http://localhost:8080/solr";
SolrServer server = new HttpSolrServer(url);
SolrQuery query = new SolrQuery("云南");
try {
QueryResponse response = server.query(query);
SolrDocumentList docs = response.getResults();
System.out.println("文档个数:" + docs.getNumFound());
System.out.println("查询时间:" + response.getQTime());
for (SolrDocument doc : docs) {
System.out.println("id: " + doc.getFieldValue("id"));
System.out.println("name: " + doc.getFieldValue("title"));
System.out.println();
}

Solr4.0使用的更多相关文章

  1. Solr4.0+IKAnalyzer中文分词安装(转)

    有近2年没接触Solr跟Lucene了,这2年自己跟solr/lucene都发生了很多变化.不过有种疏途同归的感觉,那就是都向分布式/云和监控靠了.2年前接触了solrcloud,那时大概玩了一周.那 ...

  2. Solr4.0 如何配置使用UUID自动生成id值

    原文链接http://blog.csdn.net/keepthinking_/article/details/8501058#comments 最近学习了Lucene,随便也学习了Solr,Solr规 ...

  3. solr4.0.0学习(二) 数据库导入clob与blob为索引

    导入clob很简单.但是blob好像没有提供方法,所以改了一下源码,重新编译替换class文件,竟然成功了. 先把配置文件贴上 SCHEMA.XML <?xml version="1. ...

  4. Solr4.0+IKAnalyzer中文分词安装

    1.依赖: JDK1.6,Tomcat 5.5,Solr 4.0.0,IKAnalyzer 2012FF Tomcat虽然不是必须,但觉得上生产环境的话,还是得用Tomcat,便于统一管理和监控. T ...

  5. Solr 4.0 部署实例教程

    Solr 4.0 部署实例教程 Solr 4.0的入门基础教程,先说一点部署之后肯定会有人用solrj,solr 4.0好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为H ...

  6. Tomcat部署Solr4.10.4

    前段时间学习solr,兴致勃勃的从官网下载到solr5.3.0最新版本,然后在后期部署时出现了很多问题.首先,4.0到5.0是个大版本更新,下载 的压缩包的文件结构有了很多变化,导致网上很多关于sol ...

  7. solr4.x配置IK2012FF智能分词+同义词配置

    本文配置环境:solr4.6+ IK2012ff +tomcat7 在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口T ...

  8. solr 安装

    1:solr简介 solr是一个开源的搜索引擎,是对lucene做了封装,对外提供类似于webservice接口, 可以使用http请求的方式对solr进行操作. lucene.solr.elasti ...

  9. SolrCloud分布式集群部署步骤

    Solr及SolrCloud简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成 ...

随机推荐

  1. 【计算几何】CDOJ1720 几何几何

    #include<cstdio> #include<algorithm> #include<cmath> using namespace std; #define ...

  2. 【贪心】hdu5969 最大的位或

    对于右端点r和左端点l,考虑他们的二进制位从高到低,直到第一位不同的为止. 更高的都取成相同的,更低的都取成1. 比如 101011110001 101011101001 101011111111 # ...

  3. codevs 3641 上帝选人

    3641 上帝选人  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的 ...

  4. Visio显示不完整

    下面显示不完整的话,选中对象,菜单栏设置(点击对象,右键并没有段落选项)行距为单倍:右侧显示不完整,选中后右键设置环绕方式为负于文字上方,原来是嵌入型.

  5. FIS常用功能之资源压缩

    fis server start后 资源压缩,只需要使用命令,不需要添加任何配置 fis release --optimize 或: fis release -o 在浏览器访问按F12,观看压缩前后文 ...

  6. XMPP 常见错误:<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

    一般登陆/注册 出错,会在认证失败这里打印出error信息 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLEleme ...

  7. 如何提高iOS开发能力

    ① 阅读技术博客 在现在这个年代,博客的风头早已被微博盖过.但是每天早上上班后的半小时,一定是打开博客,其中有讨论技术的,也有总结个人的相关经历,读完后肯定会有所收获.阅读博客,还有一个原因是技术博客 ...

  8. 使用SQL Server 扩展事件来创建死锁的跟踪

    我们通过SQL Server 2014图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本. 步骤如下: 步骤1: 通过“对象资源管理器”连接到实例,展开“管理”.“扩展事件”.“会话”. 步骤 ...

  9. CKFinder根据用户设置权限,不同用户有自己的私有的、独立的文件夹

    CKFinder 默认情况下多个用户共用同一个图片目录.所有上传的图片和Flash全部保存在同一个文件夹(默认为 userfiles)内.     现在想实现:     第1个需求:不同用户有自己的私 ...

  10. cc攻击技术

    攻击者借助代理服务器生成指向受害主机的合法请求,实现DOS,和伪装就叫:cc(ChallengeCollapsar). CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较 ...