Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
特点
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
工作方式
文档通过Http利用XML 加到一个搜索集合中。
查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。
简单讲拉,solr就是一个搜索引擎,可以把他比喻成数据库,只不过数据库是通过利用表和字段来进行查询等操作。而solr是通过Http利用XML或json来进行查询等操作。
下载:
上官网:http://www.apache.org/dyn/closer.lua/lucene/solr/6.5.1
装linux的下载 .tgz格式的
装win的下载 .zip格式的
安装(linux):
例如放到linux下的opt目录,然后
tar -zxvf solr-6.5.1.tgz 解压
mv solr-6.5.1 solr 重命名
cd /opt/solr/bin 进入bin目录
./solr start -force 启动(-force 是为了让它强制执行。因为我是root用户登陆的,solr不建议用管理员直接启动solr。)
安装完成。用浏览器访问:http://localhost:8983/solr 即可。
常用的几个命令:
启动:solr start
指定端口启动:solr start -p 8984
停止solr:solr stop -p 8983
删除指定的core文件:solr delete -c corename
创建core:solr create -c corename
solr状态查看:solr status
=============================
配置core(windows)
配置我们自己的core。
在控制台的左边菜单中,选择Core Admin,进入core新建页面。
在点击Add Core 保存之前, 先进入solr的安装目录的 server - solr 下 新建一个和core同名的文件夹,如:
进入E:DevelopEnvironmentsolrsolr-6.2.0serversolr 新建 democore 。
文件夹建好后,进入solr目录的 serversolrconfigsetsasic_configs 下,拷贝conf文件夹到新建的文件夹下
如:进入E:DevelopEnvironmentsolrsolr-6.2.0serversolrconfigsetsasic_configs 拷贝conf文件夹到刚刚新建的democore
完成这一步准备工作后,回到控制台的Core Admin 录入name和dir 点击 Add Core 保存即可
新建schema
core文件创建完成后,创建其对应的schema。
进入该core的Schema 菜单 ,点击Add Field ,在弹出的页面中,录入name和type,name代表字段的名称,type为类型 ,类型选择 text_general。 stored 意思为,将该字段的值进行存储,用来以后索引的时候直接取出。indexed 表示 将该字段进行索引。
录入完成后,点击Add Field保存即可。
至此,core和schema都构建完成。接下来要向solr的这个core插入数据。
使用程序插入数据
新建Java项目,将solr的对应jar包拷贝到项目中。
使用到的jar包在 dist 文件夹下,主要包括 solrj这个jar包和solr-lib下的jar包,为了方便,直接全部拷贝过去即可。
如:E:DevelopEnvironmentsolrsolr-6.2.0distsolr-solrj-6.2.0 和
E:DevelopEnvironmentsolrsolr-6.2.0distsolrj-lib
在官方的wiki中,介绍了如何使用solrj 访问solr服务。wiki地址为:
wiki
对应代码为:
HttpSolrClient.Builder builder = new HttpSolrClient.Builder("http://localhost:8983/solr/democore");
HttpSolrClient solrClient = builder.build();
SolrInputDocument document = new SolrInputDocument();
document.addField("id", System.currentTimeMillis() + "");
document.addField("title", "计算机科学与技术" + System.currentTimeMillis());
solrClient.add(document);
solrClient.commit();
solrClient.close();
查询数据
可使用solr的控制台查询,也可以使用程序查询。
输入关键字 “计算机” 可查询到对应数据。如图:
输入关键字: “计科” ,也可以查询到对应数据。如图:
证明solr插入数据成功。
使用solrj查询,根据官方wiki的例子,代码如下:
HttpSolrClient.Builder builder = new HttpSolrClient.Builder("http://localhost:8983/solr/democore");
HttpSolrClient solrClient = builder.build();
SolrQuery query = new SolrQuery();
query.set("q", "title:计科");
QueryResponse response = solrClient.query(query);
SolrDocumentList list = response.getResults();
solrClient.commit();
System.err.println("匹配数量:"+list.getNumFound());
Iterator itr = list.iterator();
while (itr.hasNext()) {
SolrDocument solrDocument = (SolrDocument) itr.next();
List title = (List) solrDocument.getFieldValue("title");
System.err.println(title.get(0));
}
运行结果:
至此,全部完成。上述只是最基本的使用配置,对于中文的分词还是停留在最原始的每个中文都当作一个词汇的分词算法上。这是比较暴力不可取的,需要替换对应的中文分词器。