solr,
Solr
一、solr概述
1、 解压
2、、Solr 的目录结构如下。
这里我们需要注意的是:
Solr 目录用来存放 Solr 的 Core,主要包含索引和配置文件。
solr-webapp 目录中管理者 Jetty 运行的 Solr 服务去程序。
Webapps 目录中的 solr.war 为 solr 服务的文本应用程序。
3、 打开solr-jetty-context.Xml文件
二、运行 Solr 服务
第一种:使用 Solr 内置的 Jetty 服务器启动 Solr
使用内置的 Jetty 来启动 Solr 服务器只需要在example 目录下,执行 start.jar 程序即可,我们可以直接执行命令:java -jar start.jar。
当服务启动后,默认发布在 8983 端口,所以可以访问该端口来访问 Solr 服务。
访问Solr如图:
第二种:(常用)
将 Solr 部署到 Tomcat 中
1、在 Tomcat 中部署 Web 服务,将solr-4.10.2/example/webapps/solr.war 复制到自己的 tomcat/webapps目录中,进行并解压。
删除solr.war的图:
2、将 Solr 用到的 jar 包拷贝到项目的 lib 目录下
、
3、创建log4j配置文件
先新建classes如图:
复制log4j.properties
粘贴log4j.properties
4、 在启动前还需要设置solr.solr.home 启动参数,
复制后solr文件夹的路径:
在 catalina.bat 文件添加配置:set "JAVA_OPTS=-Dsolr.solr.home=d:/test/solr"。
启动 Tomcat 则 Solr 的服务器发布就完成了。
访问solr如图:
三、Solr 管理页面
1、DashBoard
2、 Logging
总结:标签 用途:配置插件依赖的jar 包
注意事项:
o 如果引入多个 jar 包,要注意包和包的依赖关系,被依赖的包配置在前面
o 这里的 jar 包目录如果是相对路径,那么是相对于 core 所在目录
第一种:不复制solr文件夹(直接使用解压后的solr)
第二种:复制solr文件夹
报错原因:
所有collection里的solrconfig.xml都需要配置依赖文件夹路径:
成功
3、Core Admin
在 Solr 中,每一个 Core,代表一个索引库,里面包含索引数据及其信息。Solr 中可以拥有多个 Core,也就同时管理多个索引库!就像在 MySQL 中可以有多个 database 一样。
CoreSelector:
选择一个 Core,可以进行更详细的操作:
a) 通过 Solr 管理界面添加索引数据
b) 通过 Solr 管理界面查询索引数据
四、Solr中的Core详解
1、Core 的概念在 Solr 中一个 core 就是一个索引库,里面包含索引信息和配置文件。
2、目录结构 Core 中有两个重要目录:conf 和 data
conf 目录中有两个非常重要的配置文件:schema.xml 和 solrconfig.xml
Core 的配置文件详解 core.properties
a)修改 core 名称 Core 的属性文件,记录当前core 的名称、索引位置、配置文件名称等信息。一般要求 Core 名称跟 Core 的文件夹名称一致!这里都是 Collection1,我们可以手动修改这个属性。
此时重启 Tomcat,可以看到 core 的名字已经改变!
b)添加多个 core
在 solr 目录下创建新的文件夹core2,作为新的 core 目录,创建 conf 目录和 data 目录,并且创建文件 core.properties,从 core1/conf 目录下复制配置文件 core2/conf/下。
Collection1-副本重命名collection2
打开core.properties编辑
C)schema.xmlSolr 中会提前对文档中的字段进行定义,并且在 schema.xml 中对这些字段的属性进行约束,例如:字段数据类型、字段是否索引、是否存储、是否分词等等。
d)通过 Field 字段定义字段的属性信息
e) 通过 FieldType 指定数据类型
属性及含义
f) 、唯一主键 Lucene 中本来是没有主键的。删除和修改都需要根据词条进行匹配。而 Solr 却可以设置一个字段为唯一主键,这样增删改操作都可以根据主键来进行。
g) 动态字段 动态字段可以动态匹配,一般使用比较少,使用dynamicField 来定义。
h) solrconfig.xml这个配置文件主要配置跟索引库和请求处理相关的配置。
<lib>标签 用途:配置插件依赖的 jar 包
注意事项:
o 如果引入多个 jar 包,要注意包和包的依赖关系,被依赖的包配置在前面
o 这里的 jar 包目录如果是相对路径,那么是相对于 core 所在目录
<requestHandler>标签
用途:配置 Solr 处理各种请求(搜索/select、更新索引/update、等)的各种参数
主要参数:
o name:请求类型,例如:select、query、get、update
o class:处理请求的类
o initParams:可选。引用标签中的配置
o :定义各种缺省的配置,比如缺省的 parser、缺省返回条数
五、SolrJ的使用
1、概述 SolrJ 是 Apache 官方提供的一套 Java 开发的,访问 Solr 服务的 API,通过这套 API 可 以让我们的程序与 Solr 服务产生交互,让我们的程序可以实现对 Solr 索引库的增删改查。
添加依赖:
<!-- Junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.2</version> </dependency> <!-- Solr底层会使用到slf4j日志系统 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.22</version> </dependency> <dependency> <groupId>commons-logging</groupId> |
<artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> |
2、使用 SolrJ 添加或修改索引库数据
a、以 Document 形式添加或修改数据
@Test public void testInsertIndexByDocument() throws Exception { //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //创建文档对象 SolrInputDocument document = new SolrInputDocument(); //添加索引数据 document.addField("id", "1"); document.addField("title", "这是第一条测试数据"); //添加文档 server.add(document); //提交请求,如果ID对应的数据存在则进行更新操作,如果不存在则创建索 引 server.commit(); } |
b、使用注解和JavaBean 添加或修改数据
创建 JavaBean,并且用注解标明要添加到索引库的字段,直接通过 SolrServer 添加 JavaBean。
@Test public void testInsertIndexByBean() throws Exception { //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //添加数据 server.addBean(new Person("1","张三","张三是一个好学生")); //提交请求,如果ID对应的数据存在则进行更新操作,如果不存在则创建索 引 server.commit(); } |
3、 使用 SolrJ 删除索引库数据
删除索引可以根据 ID 删除,也可以写一个查询条件,匹配到条件的都会被删除
@Test public void testDleteIndex() throws Exception{ //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //根据条件进行删除 server.deleteByQuery("name:张三"); //提交请求 server.commit(); } |
4、使用 SolrJ 查询索引库数据
a、以 Document 形式返回查询结果
@Test public void testQueryIndex() throws Exception{ //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //定义查询条件 SolrQuery query = new SolrQuery("name:李四"); //进行查询处理 QueryResponse queryResponse = server.query(query); SolrDocumentList results = queryResponse.getResults(); System.out.println("找到了"+results.size()+"条记录"); //便利数据 for (SolrDocument solrDocument : results) { System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("name")); System.out.println(solrDocument.get("description")); } } |
b、以 JavaBean 形式返回查询结果
@Test public void testQueryIndexBean() throws Exception{ //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //定义查询条件 SolrQuery query = new SolrQuery("name:李四"); //进行查询处理 QueryResponse queryResponse = server.query(query); List<Person> beans = queryResponse.getBeans(Person.class); for (Person person : beans) { System.out.println("id:"+person.getId()); System.out.println("name:"+person.getName()); |
System.out.println("description:"+person.getDescription()); } } |
c、SolrQuery对象的高级查询
在创建 SolrQuery时,我们填写的 Query 语句,可以有以下高级写法:
查询语句中如果有特殊字符,需要转义,可以使用:””
1、匹配所有文档:*:* (通配符?和*:“*”表示匹配任意字符;“?”表示匹配出现的位 置)
2、布尔操作:AND、OR 和 NOT 布尔操作(推荐使用大写,区分普通字段)
3、子表达式查询(子查询):可以使用“()”构造子查询。比如:(query1 AND query2) OR (query3 AND query4)
4、相似度查询:
(1)默认相似度查询:title:appla~ ,此时编辑举例是 2
(2)指定编辑举例的相似度查询:对模糊查询可以设置编辑举例,可选 0~2 的整数。
5、范围查询(Range Query):Lucene 支持对数字、日期甚至文本的范围查询。结束的范围可以使用“*”通配符。
(1)日期范围(ISO-8601 时间 GMT):a_begin_date:[1990-01-01T00:00:00.000Z TO 1999-12-31T24:59:99.999Z]
(2)数字:salary:[2000 TO *]
(3)文本:entryNm:[a TO a]
6、日期匹配:YEAR, MONTH, DAY, DATE (synonymous with DAY) HOUR, MINUTE, SECOND,MILLISECOND, and MILLI (synonymous with MILLISECOND)可以被标志成 日期。
(1)r_event_date:[* TO NOW-2YEAR]:2 年前的现在这个时间
(2)r_event_date:[* TO NOW/DAY-2YEAR]:2 年前前一天的这个时间
d) SolrQuery 实现排序
@Test public void testQueryIndexSort() throws Exception{ //创建服务器对象 HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2"); //定义查询条件 SolrQuery query = new SolrQuery("*:*"); //设置按ID排序 query.setSort("id", ORDER.desc); //进行查询处理QueryResponse queryResponse = server.query(query); SolrDocumentList results = queryResponse.getResults();
System.out.println("找到了"+results.size()+"条记录");
//便利数据 for (SolrDocument solrDocument : results) { System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("title")); } } |
e) SolrQuery 实现分页
@Test 6. public void testQueryIndexPages() throws Exception{ 7. //要查询的页数 8. int pageNum = 2; 9. //每页显示条数 10. int pageSize = 2; 11. //当前页的起始条数 12. int start = (pageNum - 1) * pageSize; 13. 14. //创建服务器对象 15. HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2") ; |
16. //定义查询条件 17. SolrQuery query = new SolrQuery("*:*"); 18. //设置按ID排序 19. query.setSort("id", ORDER.desc); 20. 21. //设置起始条数 22. query.setStart(start); 23. //设置每页条数 24. query.setRows(pageSize); 25. 26. //进行查询处理 27. QueryResponse queryResponse = server.query(query); 28. SolrDocumentList results = queryResponse.getResults(); 29. 30. System.out.println("当前第" + pageNum + "页,本页共" + results.size() + "条数据。 "); 31. 32. //便利数据 33. for (SolrDocument solrDocument : results) { 34. System.out.println(solrDocument.get("id")); 35. System.out.println(solrDocument.get("title")); 36. } 37. } |
f) SolrQuery 实现高亮显示
@Test 6. public void testQueryIndexHighlighting() throws Exception{ 7. //创建服务器对象 8. HttpSolrServer server = new HttpSolrServer("http://localhost:8983/solr/collection2") ; 9. //定义查询条件 10. SolrQuery query = new SolrQuery("title:测试"); 11. 12. //设置高亮的标签 13. query.setHighlightSimplePre("<em>"); 14. query.setHighlightSimplePost("</em>"); 15. //高亮字段 16. query.addHighlightField("title"); 17. 18. //进行查询处理 19. QueryResponse queryResponse = server.query(query); 20. SolrDocumentList results = queryResponse.getResults(); |
21. 22. //获取高亮字段 23. Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); 24. 25. System.out.println("找到了"+results.size()+"条记录"); 26. 27. //便利数据 28. for (SolrDocument solrDocument : results) { 29. String id = solrDocument.get("id").toString(); 30. System.out.println("id:"+id); 31. System.out.println(highlighting.get(id).get("title"). get(0)); 32. } 33. } |
http://www.htsjk.com/solr/28280.html
www.htsjk.Com
true
http://www.htsjk.com/solr/28280.html
NewsArticle
solr, Solr 一、solr概述 1、 解压 2、、Solr 的目录结构如下。 这里我们需要注意的是: Solr 目录用来存放 Solr 的 Core,主要包含索引和配置文件。 solr-webapp 目录中管理者 Jetty 运行的...
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。