solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用

solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用

solr就不多介绍了。是用于搜索功能的开源工具,很强大

一、solr环境部署

solr本身能够用jetty启动,但是还是用tomcat启动比较适合我自己。学习solr有两个星期了,到现在(2016.11.27)solr最新版已经是6.3.0了,不过没关系,基本的东西都是一样的。

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

下载后解压,是这样的目录结构:

二、core配置

solr的core非常重要,还有什么多core什么的,由于我也是刚刚学习,还没有搞明白,这里只是能够用最简单的,我们将在solrhome文件夹下,新建文件夹:my_solr,然后将solr-6.2.1\example\example-DIH\solr\solr下的文件以及文件夹copy到my_solr下,

CREATE TABLE `solrTest` (
`solrID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`context` varchar(255) DEFAULT NULL COMMENT 'context',
`updateTime` datetime DEFAULT NULL COMMENT 'updateTime',
`sort` int(11) DEFAULT '1' COMMENT '排序',
PRIMARY KEY (`solrID`)
) DEFAULT CHARSET=utf8;

2、将mysql的驱动jar包,copy到我们tomcat-solr功能中(lib文件夹下,这个们问题的吧),

3、修改my_solr文件夹下的conf文件夹下的solr-data-config.xml文件:

Xml代码

Windows上的mysql打补丁_solr

driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
user="root"
password="123456"/>
pk="solrID"
query="select * from solrTest"
deltaImportQuery="select * from solrTest where solrID = '${dih.delta.solrID}'"
deltaQuery="select solrID from solrTest where updateTime > '${dataimporter.last_index_time}'"/>

这里面的内容具体什么意思,网上有很多专门介绍的文章博客,这里就不多说了

4、修改conf文件夹下的managed-schema文件,在schema标签下添加field

Xml代码

Windows上的mysql打补丁_solr

这里面name对应solr-data-config.xml中的name,要一直,否则solr就找不到字段了,

type是类型,indexed代表是否可用于检索,stored代表是否存储,multiValued代表是否有多个值,除此之外还有很多字段,读者可以移步度娘。

(另外说一下,我这里用的其实是schema.xml,而不是managed-schema文件,不过感觉都是一个样)

下面,看下我们的成就(别忘了mysql填点数据哦,否则啥也看不出来):

先刷新下solr数据:

在然后,比如我们数据库表中的context字段要进行分词,那么修改field:

Java代码

Windows上的mysql打补丁_solr

也就是修改type为分词器的name

这时我们在去solr查询一下,我们先填几条数据:

public class SolrQueryTest {
//solr 服务器地址
public static final String solrServerUrl = "http://localhost:8080/solr";
//solrhome下的core
public static final String solrCroeHome = "my_solr";
@SuppressWarnings({ "resource", "deprecation" })
public static void main(String[] args) {
try {
//SolrClient client = new HttpSolrClient(solrServerUrl + "/" + solrCroeHome);
//QueryResponse resp = client.query(new SolrQuery("*:*"));
SolrClient client = new HttpSolrClient(solrServerUrl);
QueryResponse resp = client.query(solrCroeHome, new SolrQuery("*:*"));
List lists =  resp.getBeans(TestBean.class);
System.out.println(lists);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

bean(注意要有solrJ的注解):

Java代码

Windows上的mysql打补丁_solr

public class TestBean {
@Field("solrID")
private String solrID;
@Field("context")
private String context;
@Field("updateTime")
private Date updateTime;
public String getSolrID() {
return solrID;
}
public void setSolrID(String solrID) {
this.solrID = solrID;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}

solr在查询时,也有很多方法,能够设置查询的条件,比如分页、分片检索、结果的过滤条件、排序等,下面只是一个示例,我一个功能的代码片段:

Java代码

Windows上的mysql打补丁_solr

/**
* 设置查询信息
*/
solrQuery.setQuery(this.getQueryFields(keyWord));    //设置基本查询
/**
* 设置查询条件
*/
solrQuery.setFilterQueries(this.getFielder(condition));
/**
* 分页
*/
solrQuery.setStart(pInteger);
solrQuery.setRows(systemConfigureUtil.getSolrRow());
/**
* 分片检索(分类检索)——
*/
solrQuery.setFacet(systemConfigureUtil.isFacet());
solrQuery.add("facet.field", systemConfigureUtil.getFacetStr()); //可以按多个字段分类,用逗号分隔
/**
* 设置过滤结果——能查询出那些字段
*/
solrQuery.add("fl", systemConfigureUtil.getFilterFields());
/**
* 排序,注意是有顺序的
*/
solrQuery.setSort(this.getSort(0));  //setSort()会覆盖之前的查询条件
solrQuery.addSort("sort", SolrQuery.ORDER.desc); //addSort()不会覆盖之前的查询条件

到此,我学到的solr的东西也就这些了,还会继续学习的。

我搭建好的tomcat-solr功能在我的github中:https://github.com/hejiawang/tomcat-solr

solrJ的练习工程:https://github.com/hejiawang/search-web