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

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

一、solr环境部署

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

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

0818b9ca8b590ca3270a3433284dd417.png

2、solr当然可以直接按网上其他很多教程那样整合到tomcat中,但是本人更喜欢建一个新工程,这样更灵活。下面我们在eclipse中新建一个tomcat-solr的java web工程,不过这里要注意,要把这个工程的访问路径变成solr,不能是tomcat-solr,因为solr的管理页面中,solr的开发者把这个目录写死了,我们要把访问路径改成solr,也就是:http://localhost:8080/solr/index.html ,怎么改呢:

在eclipse中:

0818b9ca8b590ca3270a3433284dd417.png

下面我们进行如下操作:

1)将solr-6.2.1\server\solr-webapp\webapp下的内容copy到我们web工程的webapp下

2)将solr-6.2.1\server\lib\ext下的jar包,copy到我们的tomcat-solr功能中

3)将solr-6.2.1\server\resources\log4j.properties文件copy到tomcat-solr功能的src中,

4)在tomcat-solr工程的webapp文件夹下,新建文件夹solrhome,将solr-6.2.1\server\solr下的文件夹以及文件copy到solrhome中,

5)修改web.xml文件,修改env-entry-value的值为solrhome的绝对位置,如:

0818b9ca8b590ca3270a3433284dd417.png

6)启动tomcat,访问http://localhost:8080/solr/index.html

0818b9ca8b590ca3270a3433284dd417.png

到此,solr部署完毕。

我们的tomcat-solr功能应该长得如此帅:

0818b9ca8b590ca3270a3433284dd417.png

对了,solr支持zookeeper搭建集群配置,在这里我们先注释掉,在solrhome文件夹下的solr.xml文件中,

二、core配置

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

0818b9ca8b590ca3270a3433284dd417.png

访问刚才的地址:

0818b9ca8b590ca3270a3433284dd417.png

三、整合mysql

1、首先我们在mysql中建个表作为练习,

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文件:

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

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

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

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

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

先刷新下solr数据:

0818b9ca8b590ca3270a3433284dd417.png

然后查数据:

0818b9ca8b590ca3270a3433284dd417.png

四、下面,我们看看中文分词器

solr本分提供了很多分词器(不过对中文的分词实在不能用,愤怒!!!),对了,那么什么是分词呢?比如“数据结构”这个词,没分词前,solr就按“数据结构”这个词查(有点像mysql的=),中文分词后,就按“数据”,“结构”这两个词查(有点像like),这样更符合我们的搜索习惯

有很多支持solr中文分词的jar包,比如我们用的IKAnalyzer中文分词器

我们首先导入IKAnalyzer的jar包,注意IKAnalyzer的jar包要与solr版本对应,否则会execption的,

然后在managed-schema文件的最后:

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

去看看成果:

0818b9ca8b590ca3270a3433284dd417.png

五、solrJ是连接我们java工程和solr的工具jar包,很实用

简单的使用示例:

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的注解):

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

/**

* 设置查询信息

*/

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的东西也就这些了,还会继续学习的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值