Solr学习之路–1环境集成搭建

正式开启企业级的全文检索引擎Solr的学习之路,从官网http://lucene.apache.org/solr/ 下载的是6.2.1版本,需要1.8版本的JDK支持,Solr内置了Jetty服务器,可以直接启动服务。

启动Solr

解压Solr,然后到bin目录下启动Solr,命令:solr start -e cloud -noprompt默认端口启动,配置文件【solr-6.2.1\server\etc\jetty-http.xml】可改监听端口,效果如图所示:

solr start -e cloud -noprompt

Solr会部署两个节点:8983和7574端口,算是单机版分布式Solr。启动后访问:http://localhost:8983/solr/,看下两个节点的结构图:

solr浏览器控制台

配置Core

直接solr start启动独立模式,启动Solr后创建索引库:solr create -c wenqy -d basic_configs,创建名称为“wenqy”的Core,效果如图:

solr core-wenqy

修改schama配置

下面为示例文件【solr-6.2.1\example\exampledocs\books.csv】建立索引。
修改【solr-6.2.1\server\solr\wenqy\conf\managed-schema】schema文件,为关键字段作索引。还有些是dynamicField动态字段,如图所示:
schema-field

修改配置后重启Solr,停止:solr stop -all,启动:solr start
Solr对外提供标准http接口来实现对数据索引的CRUD操作。在 Solr 中,用户通过向部署的 Solr 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,使用相应的SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回Solr 的标准 XML 响应,也可以配置Solr 的其他响应格式,如json等。

索引数据

Apache Solr自带SimplePostTool独立的Java程序,打包成Jar包。在【solr-6.2.1\example\exampledocs】目录下,可先查看帮助:java -jar post.jar -h,发起命令创建索引:java -Dtype=text/csv -Durl=http://localhost:8983/solr/wenqy/update -jar post.jar books.csv为示例文件“book.csv”做索引。还支持各种文件类型的数据。

查询索引文档

Apache Solr提供了一种基于REST API来访问的数据,并还提供了不同的参数,以检索数据。
按名称搜索,URL中的参数“q”是查询事件。打开浏览器下列URL:http://localhost:8983/solr/wenqy/select?q=name:"Foundation",查询名称为“Foundation”的索引数据,响应结果如图:

solr response

可以直接输入首字母,进行首字母检索。亦可以利用通配符检索,如:*。支持条件的搜索。我们可以设置条件,我们的查询提供了“fq”参数。如,查询价格低于6且名称包含“of”的书籍。
http://localhost:8983/solr/wenqy/select?q=name:"*of"&fq=price:[0 TO 6]
用浏览器Solr控制台查询,返回json格式的数据:

solr console

具体查询语法,可查看附录链接。Solr提供了不同语言的客户端API,如面向Java的SolrJ

集成Tomcat容器

当然,也可以将它集成到Tomcat等容器下。
将【solr-6.2.1\server\solr-webapp】目录下的webapp重命名后,放到Tomcat的webapps应用目录下,我将它重命名为solr,如图:

solr tomcat

将【solr-6.2.1\server\lib\ext】下的所有jar包拷贝到Tomcat的【webapps\solr\WEB-INF\lib】目录下;将【solr-6.2.1\server\resources】下的log4j.properties配置文件拷贝到Tomcat的【webapps\solr\WEB-INF\classes】,如果WEB-INF下没有classes文件那么就创建一个classes文件夹,这是为了日志处理模块正常工作;在Tomcat的【webapps\solr】下新建一个目录solrhome(文件夹名称可以任意命名),将【solr-6.2.1\server\solr】下的所有文件拷贝到刚刚创建的solrhome中。
修改Tomcat的【webapps\solr\WEB-INF】下的web.xml,将路径改成solrhome的路径,如图:

solr-home

运行Tomcat,运行成功后访问:http://localhost:8080/solr/index.html ,结果竟然报错。
查看Tomcat启动错误日志:Caused by: java.lang.IllegalArgumentException: The main resource set specified [D:\tomcat8.0.24\webapps\项目] is not valid,原来自己加了上下文默认应用,自己删了应用,而配置忘删了。找到原因

context-docBase

删了应用后,Tomcat启动,结果显示无法显示。后面一找,原来先前把端口改成了7080:

tomcat-port.png

最后面终于运行成功,进入控制台:

solr-控制台.png

配置Core

solrhome目录下的【configsets\basic_configs】文件夹复制到solrhome目录下,重命名为core1

在浏览器中,选择【core admin】进行索引库管理,点击add core,输入刚才重命名的目录名。如图:

solr-addCore

solrconfig.xml 和  managed-schema 两个文件在 solrhome的【core1\conf】 中。
如果需要DIH(Data Import Handler,example-DIH演示了如何从hsql数据库导入数据到solr中)服务,还需要添加DIH相关的包和和数据库对应的jdbc相关包。
solr-dataimporthandler.jar和solr-dataimporthandler-extras.jar  在【solr-6.2.1\dist】目录中可找到。

SolrJ 测试

用上面创建“wenqy”的Core为例,“book.csv”做索引数据后,有10个doc,查看统计,如图:

solr-statistics

导入Solr相关的lib包后,进行编码测试添加索引:

  1. public class AddCoreTest {
  2.     private static final String URL=“http://localhost:8983/solr/wenqy”;
  3.     private static HttpSolrClient solrClient = null;
  4.     public static void main(String[] args) {
  5.         AddCoreTest search = new AddCoreTest();
  6.         search.init();
  7.         search.addData();
  8.     }
  9.     private void init() {
  10.         solrClient = new HttpSolrClient.Builder(URL).build();
  11.         solrClient.setConnectionTimeout(3000);
  12.     }
  13.     public void addData() {
  14. //      Map<String, SolrInputField> filedMap = new HashMap<String, SolrInputField>();
  15. //      SolrInputField fa = new SolrInputField(“id”);
  16. //      fa.addValue(“20160928”, 1);
  17. //      SolrInputField fb = new SolrInputField(“name”);
  18. //      fb.addValue(“小温之家”, 2);
  19. //      filedMap.put(“id”, fa);
  20. //      filedMap.put(“name”, fb);
  21. //      SolrInputDocument doc = new SolrInputDocument(filedMap);
  22.         SolrInputDocument doc = new SolrInputDocument();
  23.         try {
  24.             // 字段和类型要与schema.xml配置文件里的相对应
  25.             //solrClient.deleteById(“id”);
  26.             doc.addField(“id”“20160928”);
  27.             doc.addField(“cat”“book”);
  28.             doc.addField(“name”“小温之家-solr学习之路”);
  29.             doc.addField(“price”“9.99”);
  30.             doc.addField(“author”“wenqy”);
  31.             doc.addField(“inStock”true);
  32.             UpdateResponse response = solrClient.add(doc);
  33.             solrClient.commit();
  34.             System.out.println(response);
  35.         } catch (SolrServerException e) {
  36.             e.printStackTrace();
  37.         } catch (IOException e) {
  38.             System.out.println(e);
  39.         }
  40.     }
  41. }

用solrj添加索引数据后,doc总数为11,增加了一个,用q搜索“name:小温之家”,得到刚才添加的结果。

solr-query.png

万事到底是不是开头难,我不知道,坚持的才是神位吧,勉励。。。

附录

查询语法wiki简介:http://wiki.apache.org/solr/SolrQuerySyntax
官网查询语法:https://cwiki.apache.org/confluence/display/solr/Query+Syntax+and+Parsing
pdf官方文档下载:https://www.apache.org/dyn/closer.cgi/lucene/solr/ref-guide/
SOLR使用手册之查询语法: http://haiziwoainixx.iteye.com/blog/2095599
linux版本快速构建: http://lucene.apache.org/solr/quickstart.html

2 人论剑于 “Solr学习之路–1环境集成搭建

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 5 = ?