1.下载solr

  官网:http://lucene.apache.org/solr/

2.目录结构如下

3.启动solr(默认使用jetty部署)

  在path路径下将 bin文件夹对应的目录加入,然后输入 solr start(或者 solr start -p port,指定端口启动)。在浏览器中访问如下:

  当然,还可以启动其他样例的服务,在example目录下有一个READEME.txt,如果感兴趣请看一下。命令格式如下:

Solr example
------------ This directory contains Solr examples. Each example is contained in a
separate directory. To run a specific example, do: bin/solr -e <EXAMPLE> where <EXAMPLE> is one of: cloud : SolrCloud example
dih : Data Import Handler (rdbms, mail, rss, tika)
schemaless : Schema-less example (schema is inferred from data during indexing)
techproducts : Kitchen sink example providing comprehensive examples of Solr features

4.Individual SolrCore

  在server/solr目录下,有一个README.txt的文件,其中说明了如何建立solr core。最简单的建立是直接复制solr中为我们提供好的例子,打开server/solr/configsets目录会发现里面已经有三个例子,因为我们是要从数据库导入数据,所以复制 “data_driven_schema_configs” 这个例子并改名为 “myCollections”。

5.导入需要的jar包

  为了导入数据和链接mysql,我们还需要导入两个重要的jar包。由于mysql的jar包并没有在项目中,我是复制了一份放到了dist目录下面了。另外两个需要的jar包就是dist目录下带有“dataimport”标识的jar包。

  然后打开myCollections/conf/solrconfig.xml,引用上面提到的jar包,如下。

6.建立数据库

  建立好之后,随便写入一点儿数据。

7.添加requestHandler

  继续修改myCollections/conf/solrconfig.xml,搜索 <requestHandler name="/select" class="solr.SearchHandler"> ,然后在该行之上添加如下代码。

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

8.建立连接配置文件

  在myCollections/conf目录下新建data-config.xml, 内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdata" user="root" password="123456" batchSize="-1" />
  <document>
<entity name="goods" pk="id" dataSource="source1"
query="select * from goods"
deltaImportQuery="select * from goods where id='${dih.delta.id}'"
deltaQuery="select id from goods where updateTime> '${dataimporter.last_index_time}'">     <field column="id" name="id"/>
    <field column="name" name="name"/>
<field column="number" name="number"/>
<field column="updateTime" name="updateTime"/>
    </entity>
  </document>
</dataConfig>

 说明:

dataSource是数据库数据源。Entity就是一张表对应的实体,pk是主键,query是查询语句。Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。其中solrdata是数据库名,goods是表名。

其中deltaQuery是增量索引,原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。

9.managed-schema配置field信息

  搜索 <field name= ,添加关联数据库表Column的信息。

  注意:默认的 filed 不要删除哦!

10.添加我们刚刚建立的core

  (1).点击Core Admin,配置我们建立的solr Core的信息,如下所示。

  (2).点击 Add Core,如下所示。

  (3).测试索引是否成功

                                   

索引成功

  (4).监测查询成功

查询成功

11.通过代码调用solr服务

  简单建立一个java项目,依赖上dist目录下的solr-solrj-6.0.0.jar。

  测试代码如下。

import java.lang.reflect.Method;
import java.sql.Timestamp;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import com.entity.Good; @SuppressWarnings("deprecation")
public class Solr {
private static HttpSolrServer solrServer; static {
//注意请求地址格式:浏览器中的地址有 ‘#’,需要把‘#’去掉!
solrServer = new HttpSolrServer("http://localhost:8983/solr/hjz");
solrServer.setConnectionTimeout(5000);
} /**
* 添加单个文档 。
*
* @param article 文章对象
* @param articleAddon 文章正文对象
*/
public static void insert(Good good) {
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", good.getId());
doc.addField("name", good.getName());
doc.addField("number", good.getNumber());
doc.addField("updateTime", good.getUpdateTime()); try {
solrServer.add(doc);
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 根据文档id删除文档 。
*/
public static void deleteById(String id) {
try {
solrServer.deleteById(id+"");
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 删除所有文档,为安全起见,使用时再解注函数体 。
*/
public static void deleteAll() {
try {
solrServer.deleteByQuery("*:*");
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 更新文档,其实也是通过insert操作来完成 。
*
* @param article 文章对象
* @param articleAddon 文章内容对象,如果不更新正文,可以为null。
*/
public static void update(Good good) {
insert(good);
} /**
* 根据文档id查询单个文档 。
* @return
*/
public static <T> T getById(int id, Class<T> clazz) {
SolrQuery query = new SolrQuery();
query.setQuery("id:" + id); try {
QueryResponse rsp = solrServer.query(query);
return rsp.getBeans(clazz).get(0);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* @param obj 对象索引
* @param idName 主键名称
*/
public static void deleteByObject(Object obj, String idName){
try {
Class<?> clazz = obj.getClass();
//将idName的首字母变成大写
if(Character.isLowerCase(idName.charAt(0))) idName = Character.toUpperCase(idName.charAt(0)) + idName.substring(1);
Method method = clazz.getMethod("get"+idName);
String idValue = (String) method.invoke(obj);
deleteById(idValue);
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args){
Good good = new Good("123", 9999, "hjzgg5211314", new Timestamp(System.currentTimeMillis()));
//Solr.update(good);
//System.out.println(Solr.getById(123, Good.class));
deleteByObject(good, "id");
}
}

  对应的实体类。

import java.sql.Timestamp;

import org.apache.solr.client.solrj.beans.Field;

public class Good{
@Field("id")
private String id;
@Field("number")
private int number;
@Field("name")
private String name;
@Field("updateTime")
private Timestamp updateTime; @Override
public String toString() {
return "Good [id=" + id + ", number=" + number + ", name=" + name + ", updateTime=" + updateTime + "]";
} public Good(){} public Good(String id, int number, String name, Timestamp updateTime) {
super();
this.id = id;
this.number = number;
this.name = name;
this.updateTime = updateTime;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Timestamp getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Timestamp updateTime) {
this.updateTime = updateTime;
} }

  每测试一次,可以在浏览器中通过query方式查看测试结果是否正确。

12.参考资料

  Solr之搭建Solr6.0服务并从Mysql上导入数据

   Solr参考指南  可以下载

sorl6.0+jetty+mysql搭建solr服务的更多相关文章

  1. sorl6.0+jetty+mysql

    sorl6.0+jetty+mysql搭建solr服务 1.下载solr 官网:http://lucene.apache.org/solr/ v2.目录结构如下 v3.启动solr(默认使用jetty ...

  2. JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现

    1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...

  3. Maven + Jetty + Jersey搭建RESTful服务

    IntelliJ IDEA + Maven + Jetty + Jersey搭建RESTful服务 本文参考以下内容: 使用Jersey实现RESTful风格的webservice(一) Starti ...

  4. Solr专题(一)手把手教你搭建Solr服务

    一.Solr是什么,能解决什么问题? Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对 ...

  5. solr之windws下搭建solr服务

    安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java ...

  6. IntelliJ IDEA + Maven + Jetty + Jersey搭建RESTful服务

    这次参考的是这个博客,完全按照这个我这里会出一些问题,一会再说就是了. https://www.cnblogs.com/puyangsky/p/5368132.html 一.首先新建一个项目,选择Ja ...

  7. 【Jersey】IntelliJ IDEA + Maven + Jetty + Jersey搭建RESTful服务

    本文参考以下内容: 使用Jersey实现RESTful风格的webservice(一) Starting out with Jersey & Apache Tomcat using Intel ...

  8. ASP.NET core1.0 EF MYSQL搭建中碰到几个问题记录

    1.No executable found matching command "dotnet-ef"   看了网上各种办法都没用,最后选择"个人用户账户"创建项 ...

  9. 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决

    1.   课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2.   搜索工程搭建 要实现搜索功能,需要搭建 ...

随机推荐

  1. accept_mutex与性能的关系 (nginx)

    注:运行环境CentOS 6+   背景      在对启动了20个worker的nginx进行压力测试的时候发现:如果把配置文件中event配置块中的accept_mutex开关打开(1.11.3版 ...

  2. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  3. CodeSimth - .Net Framework Data Provider 可能没有安装。解决方法

    今天想使用CodeSimth生成一个sqlite数据库的模板.当添加添加数据库的时候发现: .Net Framework Data Provider 可能没有安装. 下面找到官方的文档说明: SQLi ...

  4. 从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

    在上一节中,主要阐述了JavaScript方面的学习路线.先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标. 培训机构一般的套路是这样:先教JavaSE,什么都 ...

  5. Spring获取ApplicationContext

    在Spring+Struts+Hibernate中,有时需要使用到Spring上下文.项目启动时,会自动根据applicationContext配置文件初始化上下文,可以使用ApplicationCo ...

  6. 记一次.NET代码重构

    好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使劲赶的时候,神马设计都是浮云 ...

  7. 熊乐:H3 BPM为加速企业流程管理提供源动力

    近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...

  8. 如何解决流程开发中SheetRadioButtonList页面取值问题

    分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...

  9. JavaScript动画知多少?

    今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户. JS如何制造出动画效果? 结合浏览器提供的 setInterval ...

  10. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...