今天看到Solr4.0于是心血来潮重新整理一下,因为之前只整理过3.6的,而且还没有发到博客上。
下载地址http://lucene.apache.org/solr/
点击下面的4.0
转向到http://www.apache.org/dyn/closer.cgi/lucene/solr/4.0.0
我推荐大家用这个
http://labs.mop.com/apache-mirror/lucene/solr/4.0.0
你懂得,这是猫扑哦。
好吧,下载完毕后,我们解压,看到下图
之后进入example文件夹,打开README.txt
部分内容如下
This directory contains an instance of the Jetty Servlet container setup to
run Solr using an example configuration.
To run this example:
java -jar start.jar
in this example directory, and when Solr is started connect to
http://localhost:8983/solr/
To add documents to the index, use the post.jar (or post.sh script) in
the example/exampledocs subdirectory (while Solr is running), for example:
cd exampledocs
java -jar post.jar *.xml
Or: sh post.sh *.xml
按照以上步骤,可以启动Solr了.
之后访问http://localhost:8983/solr/select?q=*:*
到此说明一切都很顺利,通过post.jar也将一个文档存到了Solr服务器上。
Tomcat部署Solr
在解压出来的文件夹当中找到example\webapps\solr.war
这个便是Solr应用,我们将其拷贝到tomcat\webapp\目录下,然后启动
目的是展包,当然也可以用winrar解压出来,不过我们这样做的原因是为了看报错信息。
启动Tomcat
报错信息如下
之前3.6版本的时候,我使用JNDI在tomcat\conf\localhost\下创建solr.xml
不过这次我们就跟随问题源头,看提示信息来完成Solr部署吧
其实最主要的就是Solr的Home环境设置,这里我不多说,我们看最关键的一行
这里在我们的Tomcat目录中的bin目录里去查看solr\solr.xml,却没有找到,那么很简单。我们来创建一下,这里就直接使用多核吧。
回到Solr4.0解压后的文件夹的example目录下,我们看到multicore
很好,我们看到了solr.xml,另外还有其他文件夹,这里不分拆单独拷贝solr.xml了,此时我们应当把所有文件都复制
然后再tomcat的bin目录下创建solr文件夹将这些粘贴进去即可。
重新启动后无报错信息,我们访问http://localhost:8080/solr/ 便看到了熟悉的界面了。
前面两章已经可以运行起Solr4.0了。接下来要跟Solr通讯进行数据交互,关于Solr支持的DIH数据导入,我不写了。
回到solr4.0解压出的文件夹中找到dist
新建一个Java工程,这里我就新建了一个Web工程,将solrj和solrj-lib文件夹中的jar文件放到项目依赖中去。
- package org.solrj.root;
- import java.io.IOException;
- import org.apache.solr.client.solrj.SolrServer;
- import org.apache.solr.client.solrj.SolrServerException;
- import org.apache.solr.client.solrj.impl.HttpSolrServer;
- public class Root {
- public static void main(String[] args) {
- SolrServer server=new HttpSolrServer("http://localhost:8080/solr/core0/");
- try {
- //test
- server.deleteByQuery( "*:*" );
- } catch (SolrServerException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
执行后,没有异常,说明没有问题
- public static void addIndexDoc(SolrServer server) throws SolrServerException, IOException {
- //注意这里添加的字段名必须是 服务器上schema定义了的,不了解的请了解schema.xml去。
- SolrInputDocument doc1 = new SolrInputDocument();
- doc1.addField("id", "dog1001", 1.0f);
- doc1.addField("name", "jack", 1.0f);
- doc1.addField("price", 10);
- SolrInputDocument doc2 = new SolrInputDocument();
- doc2.addField("id", "dog1002", 1.0f);
- doc2.addField("name", "jim", 1.0f);
- doc2.addField("price", 15);
- Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
- docs.add( doc1 );
- docs.add( doc2 );
- server.add(docs);
- server.commit();
- }
执行添加方法
添加成功后,查询如下图
这说明我们添加成功
既然可以完成添加索引文档了,那么肯定要考虑到中文分词
将压缩包解压,mmseg4j-all-1.9.0-with-dic.jar该文件放置于solr应用的Web-inf\lib目录中去
- <fieldType name="textComplex" class="solr.TextField" >
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
- </analyzer>
- </fieldType>
- <fieldType name="textMaxWord" class="solr.TextField" >
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" />
- </analyzer>
- </fieldType>
- <fieldType name="textSimple" class="solr.TextField" >
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" />
- </analyzer>
- </fieldType>
将以上片段添加到schema.xml文件中去,这样我们添加了三个字段类型,这三种类型交给了分词器来处理。
也就是说我们在添加了文档包含这些字段的时候,就会进行分词索引。
我们变更comments字段为分词类型,如下图
- SolrInputDocument doc1 = new SolrInputDocument();
- doc1.addField("id", "dog1003", 1.0f);
- doc1.addField("name", "lucy", 1.0f);
- doc1.addField("price", 10);
- doc1.addField("comments", "出生在上海,原名杨颖,香港新一代潮流教主,拥有四分之一baby童年照(10张)德国血统。爷爷是德国人。");
- SolrInputDocument doc2 = new SolrInputDocument();
- doc2.addField("id", "dog1004", 1.0f);
- doc2.addField("name", "sim", 1.0f);
- doc2.addField("price", 15);
- doc2.addField("comments", "自从全家移居上海,父母一直为糊口奔驰,在小学一年级时就要自己放学,“当时太小,不知危险,反而最怕过马路。");
我们修改之前写的addIndexDoc函数,重新添加。并且执行。
如果要进行查询,请记得将Tomcat server.xml 添加URIEncoding="UTF-8"
下面我们尝试一下查询关键字
http://localhost:8080/solr/core0/select?q=comments:*上海
请使用Chrome浏览器
很好,我们看到了查询结果
那么我们如何看分词情况呢?
之前使用的都是SolrInputDocument来完成像服务器提交数据,但是Solr给我们提供了更便捷的方法
支持直接使用Java PoJo类来完成提交数据
那么我们先写一个Pojo类,如下package org.solrj.root;
- package org.solrj.root;
- import org.apache.solr.client.solrj.beans.Field;
- public class Dog {
- @Field
- private String id;
- @Field
- private String name;
- @Field
- private Float price;
- @Field
- private String comments;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Float getPrice() {
- return price;
- }
- public void setPrice(Float price) {
- this.price = price;
- }
- public String getComments() {
- return comments;
- }
- public void setComments(String comments) {
- this.comments = comments;
- }
- }
我们在相应的保持一致的字段上添加了注解。
接下来我们写一个向服务器添加的函数。
- public static void addIndexDocWithPojo(SolrServer server) throws SolrServerException, IOException{
- Dog dog1=new Dog();
- dog1.setComments("大家好,我是中国狗,我在北京");
- dog1.setId("dog1005");
- dog1.setName("天语");
- dog1.setPrice(520.6f);
- Dog dog2=new Dog();
- dog2.setComments("大家好,我是日本狗,我在东京");
- dog2.setId("dog1006");
- dog2.setName("索尼");
- dog2.setPrice(520.6f);
- List<Dog> dogs=new ArrayList<Dog>();
- dogs.add(dog1);
- dogs.add(dog2);
- server.addBeans(dogs);
- server.commit();
- }
当然这个函数还是在之前写过的Root类中。
这样就可以完成了直接使用Java Pojo的文档提交。
提交后,便可以查看我们的检索结果了。
Solr为我们提供了强大的后台查看。
添加有了,自然需要查询,那么接着来把查询的代码补上。
创建新的方法
- public static void searchDocMapToPojo(SolrServer server) throws SolrServerException{
- SolrQuery solrQuery = new SolrQuery()
- .setQuery("comments:*德国")
- .setHighlight(true)
- .setHighlightSimplePost("</em>")
- .setHighlightSimplePre("<em>")
- .addHighlightField("comments");
- QueryResponse rsp = server.query(solrQuery);
- List<Dog> list=rsp.getBeans(Dog.class);
- System.out.println(list);
- for(int i=0;i<list.size();i++){
- System.out.println(rsp.getHighlighting().get(list.get(i).getId()).get("comments"));
- }
- }
这样执行后,可以看匹配到的高亮内容。
删除和修改,请查看solr api
http://dl.iteye.com/topics/download/b570d149-25a6-3dd1-8e82-c4a340009dcf
相关推荐
在Jetty和Tomcat等应用服务器下运行Solr,需要对服务器进行适当的配置。例如,你可能需要在服务器的web.xml文件中配置Solr的Context,以便让服务器知道如何处理Solr的请求。同时,还需要确保服务器有足够的内存来...
Solr集群搭建是一个复杂但重要的过程,用于实现大型、高可用性和可扩展性的搜索解决方案。Apache Solr是一款基于Lucene的开源全文搜索引擎,它提供了分布式搜索、近实时处理、多字段排序等功能。以下是对Solr集群...
Solr 搭建步骤详解 Solr 是一款流行的开源搜索引擎 Server,基于 Lucene 搜索库。该引擎可以提供高效、可扩展、灵活的搜索功能。下面是 Solr 搭建步骤的详细解释: 1. Solr 搭建准备 在搭建 Solr 之前,需要了解...
本文将详细介绍如何搭建Solr环境,并解析其配置文件,同时也会涉及SolrJ客户端的使用。 **一、Solr环境搭建** 1. **系统需求**: Solr可以在多种操作系统上运行,包括Windows、Linux和Mac OS。确保你的系统已安装...
标题中的“利用Solr搭建你的搜索引擎”意味着我们将探讨Apache Solr这一开源全文搜索平台的搭建过程。Solr是基于Lucene库的,提供了一个高效、可扩展的搜索和导航功能,广泛应用于各种企业的数据检索需求。 Solr的...
linux下solr的搭建,,详细的描述了solr的搭建过程,文档还是比较用心写的,有不明白的地方欢迎邮件询问:1005576543@qq.com
在本资源包中,包含了在Linux环境下搭建Solr所需的几个关键组件,包括Tomcat服务器、Solr核心服务以及IK分词器。下面将详细介绍这些组件以及搭建过程。 首先,JDK是运行Solr的基础,因为它是由Java编写的。资源包中...
Solr搭建入门详解 Apache Solr是一款开源的企业级搜索平台,由Apache软件基金会开发,它提供了全文检索、命中高亮、拼写检查、Faceted Search(分面搜索)等多种功能,广泛应用于网站内容搜索、电商商品检索等领域...
自己写的 hadoop nutch solr 环境搭建手册,成功搭建后写的,会有红色标注容易出错的地方
Solr集群搭建是一个复杂但重要的任务,它涉及到分布式搜索引擎的配置和管理,使得大量数据能够被高效、快速地检索。Solr是Apache软件基金会的一个开源项目,它提供了一个高性能、可扩展的全文检索平台,广泛应用于...
apache-tomcat-8.5.24+ikanalyzer-solr6.5+solr-7.2.0,目前使用docker进行镜像安装,安装参考:https://www.jianshu.com/p/7c4d9d7dcd94
Solr集群搭建是构建大规模、高可用搜索服务的基础。在这个过程中,我们将主要关注以下几个关键步骤和概念: 1. **Solr的基本介绍**:Solr是一款开源的企业级全文搜索引擎,由Apache软件基金会开发,用于处理和索引...
Solr环境搭建与IKAnalyzer3分词整合 在本文中,我们将详细介绍如何搭建 Solr 环境并将 IKAnalyzer3 分词器整合到 Solr 中。Solr 是一个基于 Lucene 的搜索服务器, IKAnalyzer 是一个开源的中文分词器,通过将其...
Solr是中国Apache软件基金会开发的一款高性能、基于Java的全文搜索引擎服务器。...在本资源包中,包含了Solr 4.10.3...通过理解和应用这些知识,你将能够成功地搭建起一个功能完备的Solr搜索引擎服务,满足各种搜索需求。
在本教程中,我们将深入探讨如何搭建Solr 7.2.1环境,并配置中文分词器IKAnalyzer以支持中文搜索。 首先,我们来了解Solr 7.2.1的安装步骤: 1. **下载Solr**:访问Apache Solr官方网站,下载最新稳定版的Solr,...
### Solr 5.3.1 集群搭建教程 - 线上环境搭建 #### 软件环境配置 本教程旨在详细介绍如何在Windows 7环境下搭建一个用于生产环境的高可靠性Solr 5.3.1集群。整个过程分为几个阶段:准备软件环境、部署单机版Tomcat...
### Solr3.5开发应用指导 #### 一、概述 **1.1 企业搜索引擎方案选型** 在选择企业搜索引擎方案时,考虑到多种因素,包括但不限于开发成本、可维护性和后期扩展性等。常见的几种方案包括: 1. **基于Lucene自行...