spring boot集成solr(Spring boot集成openApi网关)

  本篇文章为你整理了spring boot集成solr(Spring boot集成openApi网关)的详细内容,包含有spring boot集成socketio Spring boot集成openApi网关 Spring boot集成XWiki Spring boot集成elasticsearch spring boot集成solr,希望能帮助你了解 spring boot集成solr。

  1. 了解Solr

    Solr是一个独立的企业级搜索应用服务器,对外提供API接口。用户可以通过HTTP请求向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过HTTP GET操作提出查找请求, 并得到XML格式的返回结果。Solr现在支持多种返回结果。

  2. 安装配置Solr

    2.1Solr安装

    (1)访问镜像网站,下载Solr压缩包。

    (2)在下载完成后解压文件,在“cmd"控制台进入"solr/bin”目录下,输入"solr start" 命令启动Solr。

    如果出现以下提示,则表示成功启动。

    Waiting up to 30 to see Solr running on port 8983
  Started Solr server on port 8983. Happy searching!

    (3)访问 http://localhost:8983/solr 就可以看到已经启动了。

  常用命令如下。

  停止:"solr stop -p 8983" 或 "solr stop - all"。

  查看运行状态:solr status

    2.2 Solr配置

    (1)进入Solr 的安装目录下的server/solr/,创建一个名字为new_core的文件夹。

    (2)将 conf 目录(在安装目录/server/solr/configsets/sample_techproducts_configs 下) 复制到new_core目录下。

    (3)访问 "http://localhost:8983/solr/#/"

      单击导航栏的“Core Admin”,在弹出窗口中单击“Add Core"命令,弹出如图13-8所示的对话框,输入名字和目录名,再单击“Add Core”按钮,完成创建。

  图 13-8

  3. 整合 Spring Boot 和 Solr

    (1)添加依赖,见以下代码:

  

 dependency 

 

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-data-solr /artifactId

   /dependency

 

    (2)写入Solr配置

  

spring:

 

   data:

   solr:

   host: http://localhost:8983/solr/new_core

 

    1.创建 User 类

    User类必须继承可序列化接口,见以下代码:

  

package com.intehel.demo.domain;

 

  import lombok.Data;

  import org.apache.solr.client.solrj.beans.Field;

  import java.io.Serializable;

  @Data

  public class User implements Serializable {

   @Field("id")

   private String id;

   @Field("name")

   private String name;

  }

 

    2. 测试增加、删除、修改和查询功能

    (1)测试増加功能

  

@RequestMapping("/addUser")

 

  public String addUser() throws IOException, SolrServerException {

   User user = new User();

   user.setId("155371");

   user.setName("鸡蛋火腿饼");

   solrClient.addBean(user);

   UpdateResponse commit = solrClient.commit();

   return commit.toString();

  }

 

    (2)测试増加功能,根据id查询刚刚添加的内容,见以下代码:

  

@RequestMapping("/getByIdFromSolr/{id}")

 

  public String getByIdFromSolr(@PathVariable String id) throws IOException, SolrServerException {

   //根据id查询内容

   SolrDocument solrDocument = solrClient.getById(id);

   //获取filedname

   Collection String filedname = solrDocument.getFieldNames();

   Map String, Object filedValueMap = solrDocument.getFieldValueMap();

   List SolrDocument childDocuments = solrDocument.getChildDocuments();

   String result = solrDocument.toString();

   return result;

  }

 

    (3)测试修改功能,根据id修改内容,见以下代码:

  

@RequestMapping("/updateUser")

 

  public String updateUser() throws IOException, SolrServerException {

   User user = new User();

   user.setId("155371");

   user.setName("烤冷面");

   solrClient.addBean(user);

   UpdateResponse commit = solrClient.commit();

   return commit.toString();

  }

 

    所谓Solr的更新操作,就是对相同id的文档重新添加一次。修改之后,Version变得不一样了。

    (4)测试删除功能,根据id删除内容,见以下代码:

  

@RequestMapping("/deleteUser")

 

  public String deleteUser() throws IOException, SolrServerException {

   UpdateResponse updateResponse = solrClient.deleteById("155371");

   long elapsedTime = updateResponse.getElapsedTime();

   int qTime = updateResponse.getQTime();

   //请求地址

   String requestUrl = updateResponse.getRequestUrl();

   //请求的结果

   NamedList Object response = updateResponse.getResponseHeader();

   //请求的状态

   solrClient.commit();

   int status = updateResponse.getStatus();

   //成功,则返回0,如果没有文档被删除也会返回0,代表根本没有

   return String.valueOf(status);

  }

 

    (5)实现文档高亮显示,见以下代码:

  

@RequestMapping("/queryAll")

 

  public String queryAll() throws IOException, SolrServerException {

   SolrQuery solrQuery = new SolrQuery();

   //设置默认搜索域

   solrQuery.setQuery("*.*");

   solrQuery.set("q","知然");

   solrQuery.add("q", "知然");

   //设置返回结果的排序规则

   solrQuery.setSort("id",SolrQuery.ORDER.asc);

   //设置查询的条数

   solrQuery.setRows(50);

   //设置查询的开始

   solrQuery.setStart(0);

   //设置分页参数

   solrQuery.setStart(0);

   solrQuery.setRows(20);

   //设置高亮

   solrQuery.setHighlight(true);

   //设置高亮的字段

   solrQuery.addHighlightField("name");

   //设置高亮的样式

   solrQuery.setHighlightSimplePre(" font color=red

   solrQuery.setHighlightSimplePost(" /font

   System.out.println(solrQuery);

   QueryResponse queryResponse = solrClient.query(solrQuery);

   Map String, Map String, List String highlightMap = queryResponse.getHighlighting();

   SolrDocumentList documents = queryResponse.getResults();

   long numFound = documents.getNumFound();

   System.out.println("查询到的文档数量"+numFound);

   for (SolrDocument document : documents) {

   System.out.println(document);

   System.out.println(document.get("name"));

   System.out.println(highlightMap);

   return "true";

  }

 

  对比Elasticsearch和Solr:

    (1)Solr的优点。

  Solr有一个更大、更成熟的用户、开发和页献者社区。

  支持添加多种格式的索引,如:HTML、PDF、微软Office系列软件格式,以及JSON、 XML、CSV等纯文本格式。

  比较成熟、稳定。

  搜索速度更快(不建索引时)。

  Solr利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。 如果项目本身使用了 Zookeeper,那Solr可能是最好选择。有时缺点在特点场景下可能会变成优点。

  如果项目后期升级,要朝着Hadoop这块发展,当数据量较大时,用Hadoop处理数据, Solr可以很方便地与Hadoop结合。

    (2)Elasticsearch 的优点。

  Elasticsearch本身是分布式、分发实时的,不需要其他组件。

  Elasticsearch完全支持Apache Lucene的接近实时的搜索。

  它处理多用户不需要特殊配置,而Solr则需要更多的高级设置。

  Elasticsearch采用Gateway的槪念,备份更加简单。各节点组成对等的网络结构,某节点出现故障会自动分配其他节点代替其进行工作。

    (3)Solr的缺点。

  建立索引时,搜索效率下降,实时索引搜索效率不高。

  实时搜索应用效率明显低于Elasticsearch.

    (4)Elasticsearch 的缺点。

  没有Solr的生态系统发达。

  仅支持JSON文件格式。

  本身更注重核心功能,高级功能多由第三方插件提供。

  总结:Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。

  

  以上就是spring boot集成solr(Spring boot集成openApi网关)的详细内容,想要了解更多 spring boot集成solr的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: