1 solr的下载

从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr最新版本,根据Solr的运行环境,Linux下需要下载solr-7.3.1.tgz,windows下需要下载solr-7.3.1.zip

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

本教程中我使用的是solr-4.10.3.zip版本。新版本大体上都是一样的。注意solr-7.3.1需要的jdk的版本须在1.8及其以上。

2 solr的文件夹结构

bin:solr的运行脚本 ,想要运行服务的服务的时候,可以双击运行里面的solr.cmd文件,不过使用的自带的jetty小服务器。

contrib:solr的一些贡献软件/插件,用于增强solr的功能。

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

docs:solr的API文档

example:solr工程的例子目录:

example/solr:

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

example/multicore:

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

example/webapps:

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

licenses:solr相关的一些许可信息

system_requirements.txt : 系统需求信息【里面可以看到对应版本需要的jdk版本信息】

3 运行环境

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

Solr:Solr4.10.3

Jdk:jdk1.7.0_80

Tomcat:apache-tomcat-7.0.52

4 solr整合tomcat

因为我之前已经安装好了jdk,环境变量都已经配置好了。这里就不需要安装jdk和配置环境变量了。

1 创建目录

第一步:在D盘下面创建一个solr的文件夹

2 解压tomcat到创建的目录

第二步:解压tomcat的安装文件到solr目录下。

这一步建议使用新的安装文件解压,不要使用之前用过的tomcat

完成后的效果:

3 解压solr到创建的目录

第三步:解压solr-4.10.3.zip压缩文件到solr目录下

完成后的效果:

4 拷贝solr.war

第四步:拷贝solr-4.10.3里面的solr.war包到tomcat的的webapps里面去

1.solr.war在D:\solr\solr-4.10.3\example\webapps目录下

2.拷贝到D:\solr\apache-tomcat-7.0.52\webapps里面去

5 解压solr.war

第五步:使用解压工具解压solr.war包  或者  启动tomcat服务自动完成解压

如果启动tomcat服务自动解压的话,解压完成后记得停止tomcat服务,因为我们的配置工作还没有完成,

因此这里建议使用解压工具手动解压。

6 删除solr.war

第六步:删除tomcat下的webapps里面的solr.war包

7 拷贝jar包到工程中

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

注意:对于一个tomcat有两个存放lib包的地方。

1.第一个地方是:你的项目下面的WEB-INF下面的lib目录里面

2.第二个地方是:tomcat安装目录下的lib目录里面

对于这两处地方,我们建议放到你的项目下面的WEB-INF下面的lib目录里面。

8 准备solrhome

第八步:配置solrHome 和 solrCore

1.在D:\solr目录下创建一个solrhome文件夹(存放solr所有配置文件的一个文件夹)

\solr-4.10.3\example\solr目录就是一个标准的solrhome。

2.复制\solr-4.10.3\example\solr文件夹里面的全部内容到刚刚创建的solrhome目录下面

为什么不使用\solr-4.10.3\example\solr这个标准的solrhome呢?

答:如果是单机版用这个还可以。如果搭建集群我们需要很多个solrhome,你就一个源代码包是不够用的。

补充:

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

  1. 在solrcore中有一个文件夹叫做conf,包含了索引solr实例的配置信息。
  2. 在conf文件夹下有一个solrconfig.xml。配置实例的相关信息。如果使用默认配置可以不用做任何修改。

        Xml的配置信息:

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

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

        requestHandler:

9 配置solrhome到web.xml中

第九步:配置solrhome到我们的web.xml里面

其它瞎掰:weblogic服务器一般在我们的政府机构使用,电商一般使用的是tomcat.银行一般使用的IBM公司的websphere,银行使用的数据库一般是db2.

下面正式说一下怎么配置我们的solrhome:

打开web.xml,找到下面的内容

修改为:D:\solr\solrhome就是上面配置的solrhome所在的位置

注意:solr/home名称必须是固定的。

10 启动tomcat

第十步:进入tomcat的bin目录,双击startup.bat启动tomcat服务

11 访问

第十一步:浏览器访问localhost:8080/solr/出现下面的界面说明安装成功了

4 安装中文分词器

第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。

第二步:在solr/WEB-INF/下面创建classes目录

第三步:复制IKAnalyzer的配置文件和自定义词典和停用词典到solr的classpath下。即是复制到上一步创建的classes目录下。

注意:eclipse的文本编辑是以UTF-8 无BOM格式编码的,如果使用文本编辑器编辑推荐使用notepad++编辑,

选择一样的编码格式【以UTF-8 无BOM格式编码】,这样可以避免,你修改ext.dic或者stopword.dic文档之后就不好使了。

第四步:在D:\solr\solrhome\collection1\conf下的schema.xml文件中添加一个自定义的fieldType,使用中文分析器。

直接添加下面的代码到配置文件里面就可以了:

<!-- IKAnalyzer-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

第五步:定义一个field,指定field的Type属性为text_ik.

复制下面的代码添加到schema.xml配置文件就可以了。

<!--IKAnalyzer Field-->
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>

四五两步配置后的效果:

第六步:重启tomcat,配置生效

第七步:测试

5 批量导入数据

使用dataimport插件批量导入数据。

第一步:把dataimport插件的依赖的jar包添加到solrcore(collection1\lib)中去。

1.jar包所在位置

2.D:\solr\solrhome\collection1下面没有lib文件夹,创建一个

3.将jar包拷贝进去

第二步:导入数据库的驱动包到solrcore(collection1\lib)中去。

这里需要的数据库的驱动包需要你自己准备

完成后的效果:

第三步:修改D:\solr\solrhome\collection1\conf下的solrconfig.xml文件,添加一个requestHandler。

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

效果:

第四步:创建一个data-config.xml,保存到D:\solr\solrhome\collection1\conf目录下

1.创建data-config.xml文件。

2.复制下面的代码到data-config.xml文件中

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://39.105.94.154:3306/lucene"
user="tom"
password="tom"/>
<document>
<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
<field column="pid" name="id"/>
<field column="name" name="product_name"/>
<field column="catalog_name" name="product_catalog_name"/>
<field column="price" name="product_price"/>
<field column="description" name="product_description"/>
<field column="picture" name="product_picture"/>
</entity>
</document>
</dataConfig>

dataSource和entity里面的内容根据自己的实际情况修改.

对于没有的域需要自己配置。

   <!--product-->
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_price" type="float" indexed="true" stored="true"/>
<field name="product_description" type="text_ik" indexed="true" stored="false" />
<field name="product_picture" type="string" indexed="false" stored="true" />
<field name="product_catalog_name" type="string" indexed="true" stored="true" /> <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_description" dest="product_keywords"/>

在schema.xml中加入上面的代码,效果如下

第五步:重启tomcat,让配置生效。

第六步:点击Execute按钮导入数据。

勾选Auto-Refresh Status 可以自动刷新,看到导入的状态

入数据前会先清空索引库,然后再导入。

6 Solr后台管理界面维护索引

1 添加/修改文档

id相同的话,会先删除原来的,然后保存新的。

2 删除文档

1 删除指定id的索引

 2 删除查询到的索引数据

3 删除所有的索引数据

7 solr后台管理界面查询索引

通过/select 搜索索引,Solr 制定一些参数完成不同需求的搜索

1 q  query

1 q - 查询字符串,必须的,如果查询所有使用*:*。

2 fq filter query

3 sort

4 start&rows

5  fl

6 df

7 wt

9 hl

8  Solr 4.10.1 使用 SolrJ 管理索引库

1 什么是SolrJ

solrj 是访问 Solr 服务的 java 客户端,提供索引和搜索的请求方法,SolrJ 通常在嵌入在业务系统中,通过 SolrJ
的 API 接口操作 Solr 服务.如下图:

2 依赖的jar包

3 使用SolrJ添加文档

实现步骤:

第一步:创建一个 java 工程。

第二步:导入 jar 包。

maven工程添加下面的依赖

<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>

第三步:和 Solr 服务器建立连接。HttpSolrServer 对象建立连接。

第四步:创建一个 SolrInputDocument 对象,然后添加域。

第五步:将 SolrInputDocument 添加到索引库。

第六步:提交。

//向索引库中添加索引
@Test
public void addDocument() throws Exception {
//和solr 服务器创建连接
//参数:solr 服务器的地址,默认找的collection1,如不不是需要指明。
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
//向文档中添加域
//第一个参数:域的名称,域的名称必须是在 schema.xml 中定义的
//第二个参数:域的值
document.addField("id", "c0001");
document.addField("title_ik", "使用 solrJ 添加的文档");
document.addField("content_ik", "文档的内容");
document.addField("product_name", "商品名称");
//把 document 对象添加到索引库中
solrServer.add(document);
//提交修改
solrServer.commit();
}

4 根据 id 删除文档

//删除文档,根据 id 删除
@Test
public void deleteDocumentByid() throws Exception {
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//根据 id 删除文档
solrServer.deleteById("c0001");
//提交修改
solrServer.commit();
}

5 根据查询删除文档

查询语法完全支持 Lucene 的查询语法。

//根据查询条件删除文档
@Test
public void deleteDocumentByQuery() throws Exception {
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//根据查询条件删除文档,*:*刪除所有
solrServer.deleteByQuery("*:*");
//提交修改
solrServer.commit();
}

6 修改文档

在 solrJ 中修改没有对应的 update 方法,只有 add 方法,只需要添加一条新的文档,和被修改的文档 id 一致就,可以
修改了。本质上就是先删除后添加。

7 简单查询

//查询索引
@Test
public void queryIndex() throws Exception {
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个 query 对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("*:*");
//也可以这样写:query.set("q","*:*");
//执行查询
QueryResponse queryResponse = solrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList = queryResponse.getResults();
//共查询到商品数量
System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
//遍历查询的结果
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("product_name"));
System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_catalog_name"));
System.out.println(solrDocument.get("product_picture"));
}
}

8 复杂查询

其中包含查询、过滤、分页、排序、高亮显示等处理。

// 复杂查询索引
@Test
public void queryIndex2() throws Exception {
// 创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
// 创建一个 query 对象
SolrQuery query = new SolrQuery();
// 设置查询条件
query.setQuery("钻石");
// 也可以这样写:query.set("q","钻石");
// 也可以这样写:query.set("q", "id:1");
// 也可以这样写:query.set("q", "*:*"); // 过滤条件
query.setFilterQueries("product_catalog_name:幽默杂货");
// 也可以这样写:query.set("fq","product_catalog_name:幽默杂货");
// 也可以这样写: query.set("fq","product_price:[* TO 10]"); // 排序条件
query.setSort("product_price", ORDER.asc);
// 也可以这样写:query.addSort("product_price asc");
// 也可以这样写:query.addSort("product_price",ORDER.asc);
// 也可以这样写:query.set("sort", "product_price asc"); // 分页处理
query.setStart(0);
query.setRows(10);
// 也可以这样写:query.set("start", 0);
// 也可以这样写:query.set("rows", 10);
// 结果中域的列表
query.setFields("id", "product_name", "product_price", "product_catalog_name", "product_picture");
// 也可以写成下面这样:query.set("fl", "product_name","product_price"); // 设置默认搜索域
query.set("df", "product_keywords"); // 打开高亮显示
query.setHighlight(true);
// 高亮显示的域
query.addHighlightField("product_name");
// 高亮显示的前缀
query.setHighlightSimplePre("<span style='color:red;'>");
// 高亮显示的后缀
query.setHighlightSimplePost("</span>"); // 执行查询
QueryResponse queryResponse = solrServer.query(query);
// 取查询结果
SolrDocumentList solrDocumentList = queryResponse.getResults();
// 共查询到商品数量
System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
// 取高亮显示部分的内容
// Map k id V Map
// Map k 域名 V List
// List list.get(0);
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); // 遍历查询的结果
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
//看高亮显示部分是否有此 id 的内容,有取出。没有返回 null.
Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
// 判断一下,防止出现空指针异常
List<String> list = null;
if (map != null) {
list = map.get("product_name");
}
// 判断是否有高亮内容
String productName = "";
if (null != list) {
productName = list.get(0);
} else {
productName = (String) solrDocument.get("product_name");
}
System.out.println(productName);
System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_catalog_name"));
System.out.println(solrDocument.get("product_picture"));
}
}
query.setQuery("钻石"); 如果不指定默认搜索域,默认配置文件里面走的是text域。

可以看到默认的所搜域是text , 默认的条数是10条。


solr的安装及配置详细教程/solr入门教程的更多相关文章

  1. 安装、配置Jupyter Notebook快速入门教程

    What? Why? How? ---安装 ---启动 ---关闭 ---保存 Markdown语法 Magic关键词 转换notebook--toHTML 创建幻灯片 运行代码 What? 文字化编 ...

  2. JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

    1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再 ...

  3. solr与.net系列课程(一)solr的安装与配置

    不久之前开发了一个项目,需要用到solr,因为所以在开始再网上查找资料,但是发现大部分的资料都是很片面的,要么就是只讲解solr如何安装的,要么就是只讲解solr的某一个部分的,而且很多都是资料都是一 ...

  4. solr的安装与配置

    solr的安装与配置 不久之前开发了一个项目,需要用到solr,因为所以在开始再网上查找资料,但是发现大部分的资料都是很片面的,要么就是只讲解solr如何安装的,要么就是只讲解solr的某一个部分的, ...

  5. Solr学习总结(二)Solr的安装与配置

    接着前一篇,这里总结下Solr的安装与配置 1.准备 1.安装Java8 和 Tomcat9 ,java和tomcat 的安装这里不再重复.需要注意的是这两个的版本兼容问题.貌似java8 不支持,t ...

  6. MySQL5.7免安装版配置详细教程

    MySQL5.7免安装版配置详细教程 一. 软件下载 Mysql是一个比较流行且很好用的一款数据库软件,如下记录了我学习总结的mysql免安装版的配置经验,要安装的朋友可以当做参考哦 mysql5.7 ...

  7. Solr学习总结 Solr的安装与配置

    接着前一篇,这里总结下Solr的安装与配置 1.准备 1.安装Java8 和 Tomcat9 ,java和tomcat 的安装这里不再重复.需要注意的是这两个的版本兼容问题.貌似java8 不支持,t ...

  8. Tableau Server注册安装及配置详细教程

    Tableau Server注册安装及配置详细教程 本文讲解的是 Tableau Server 10.0 版本的安装及配置 这里分享的 TableauServer 安装版本为64位的10.0版本Ser ...

  9. ubuntu下安装和配置最新版JDK8傻瓜教程

    ubuntu下安装和配置最新版JDK8傻瓜教程 听语音 | 浏览:18940 | 更新:2014-07-14 22:13 | 标签:ubuntu 1 2 3 4 5 6 分步阅读 ubuntu系统通常 ...

随机推荐

  1. 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]

    本系列文章导航 深入浅出Java多线程(1)-方法 join 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) 深入浅出多线程(3)-Future异步模式以及在JDK1.5Concu ...

  2. Mysql简介与编译安装

    ==========MYSQL工作原理图: 1>数据库简介:简单的说数据库(database)就是一个存储数据的仓库,它将数据按照特定的规律存储到磁盘上,通过数据库管理系统,能够有效的管理存储在 ...

  3. docker获取镜像很慢解决办法

    docker pull selenium/hub获取非常慢 可以使用docker中国的官方镜像加速 docker pull registry.docker-cn.com/selenium/hub 官方 ...

  4. selenium alert JS弹窗问题处理

    弹窗一般分为三种类型: 1.警告消息框(alert) 警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操 ...

  5. VMware桥接模式下实现局域网的互通

    在 VMware worktaion pro 14 版本中,创建了 windows server 2003 和 windows xp 两台虚拟机,现在要让它们组成一个局域网(不连接到外网),以下是具体 ...

  6. 深入了解java虚拟机(JVM) 第三章 内存区域----堆空间

    一.堆的含义 jvm堆的区域主要是用来存放对象的实例,它的空间大小是JVM内存区域中占比重最大的,也是jvm最大的内存管理模块,最重要的是,这个区域是垃圾收集器主要管理的区域,这意味着我们在考虑垃圾回 ...

  7. Centos6和7的区别

    1.init系统 Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化.内核初始化的最后一步就是启动 pid 为 1 ...

  8. C# - Common Tool

    Json 涉及命名空间 using System.IO; using System.Net; using System.Runtime.Serialization.Json; using Newton ...

  9. [web]深入理解Session和Cookie

    一.理解Cookie 由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了.那么Cookie的作用就是用户通过http访问一个服务器时, ...

  10. 2016级算法第二次上机-D.Bamboo的饼干

    Bamboo的饼干 分析 从两个数组中各取一个数,使两者相加等于给定值.要注意去重和排序 难度不大,方法很多,基本只要不大于O(n^2 ) 的都可以过.本意想考察二分搜索 还可以借助stl中的map, ...