当前位置:首页 > CN2资讯 > 正文内容

solr服务器

1天前CN2资讯

目标:

solr的概念
solr服务器的搭建和使用
solr中导入数据库数据
项目中怎么使用solr实现商品搜索功能

一.solr相关概念

1.1 什么是Solr?

solr是一个独立的企业级搜索应用服务器,它是对外提供类似于web-service的api接口,用户可以通过http请求,发送一定格式的xml数据到solr,生成索引,也可以发送http get请求,请求solr服务器查询数据,将查询出的数据也是以xml格式返回.

1.2.为什么要用solr?

1.数据库的模糊查询没有分词的功能,solr有,可以更有效的查询到我们需要的数据

2.从solr 服务器中查询数据会比从数据库查询速度要快.

1.3.solr的工作方式

文档通过Http利用XML 加到一个搜索集合中。Solr查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

1.4. solr特点

1.高级全文搜索能力:由Lucene 提供支持,Solr可实现强大的匹配功能,包括短语,通配符,联接,分组以及任何数据类型 .

2.拥有基于标准的开放式接口- XML、JSON 和 HTTP

3.综合的管理界面

4.高度的可扩展性和容错性

5.能够实时索引

6.可扩展的插件架构,Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。

1.5.solr版本和jdk需求关系

版本 发布时间 说明

1.1 2007-01-18 -

....

4.0.0 2013-01-16 Java 1.6 以上,ZooKeeper 3.3.6;引入solrcloud

....

4.7.1 2014-04-01 Java 1.6 以上,最后一个采用旧版配置方法版本

4.8.0 2014-04-27 Java 1.7 以上,ZooKeeper 3.4.6

....

6.0.0 2016-04-07 Java 1.8 以上,Jetty 9.3.8

.....

1.6. Solr 相关链接

​ Solr 各版本下载地址:​​http://archive.apache.org/dist/lucene/solr/​​

​ Solr 官方网站:​​http:///solr/resources.html​​

​ 详细的solr中文手册链接:​​https://www.w3cschool.cn/solr_doc/​​

二.solr的安装

2.1 下载jar 7.6.0

2.2 解压

解压出来的文件目录


2.3 启动服务器

2.4访问

输入: ​​http://localhost:8983​​

三 创建core

在solr中,每一个core代表一个索引库,里面保存索引数据以及配置信息

solr中可以有多个core,也就相当于mysql服务器下可以多个数据库

3.1 方法1: 用命令创建

  • solr create -c core名称
  • core的存放路径
  • 3.2 方法2:界面创建

    1.在solr-7.6.0/server/solr 文件夹下创建一个core文件夹 ,取名为students(商城项目里取名为goods)

  • 将C:\solr-7.6.0\server\solr\configsets\\_default下的conf文件复制一份到students(或goods)文件夹下
    3.在solr界面Add Core,(之前取名goods的 这里名字就为goods)
  • 四. 添加中文分词

    选择刚才创建的core,点击Analysis进入分词分析页面,输入要分词的句子,选择分词库,点击分析按钮,即可看到分词结果

    solr默认不支持中文分词

    4.1测试自带的中文分词(商城项目配置 跳过这一步 直接用后面的ik分词器)

    4.1.1 添加中文分词插件

    solr 7.6中自带中文分词插件,将solr-7.6.0\contrib\analysis-extras\lucene-libs\lucene-analyzers-smartcn-7.6.0.jar 复制到 solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib 目录中

    4.1.2配置中文分词

    修改 solr-7.6.0\server\solr\articles【创建的core的名称】\conf\managed-schema文件

    添加我们的中文配置【在eclipse/idea等工具里打开,记事本打开容易出现编码问题】


    <!-- Chinese -->
    <fieldType name="text_cn" positionIncrementGap="100">

    <analyzer type="index">
    <tokenizer />
    </analyzer>

    <analyzer type="query">
    <tokenizer />
    </analyzer>

    </fieldType>

    4.1.3重启solr,测试中文分词

    solr restart -p 8983

    4.2 测试中文分词起ik-analyzer

    4.2.1 下载ik-analyzer-7.6.0.jar包

    并添加到solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib 目录中

    4.2.2 在创建的core里的配置文件managed-schema.xml中添加

    <!-- ik分词器 -->
    <fieldType name="text_ik" >
    <analyzer type="index">
    <tokenizer useSmart="false" conf="ik.conf"/>
    <filter />
    </analyzer>
    <analyzer type="query">
    <tokenizer useSmart="true" conf="ik.conf"/>
    <filter />
    </analyzer>
    </fieldType>

    4.2.3 重启服务器, 测试

    solr restart -p 8983

    五.导入数据库中数据

  • 将数据库jar包(在发你们的solr资料文件里)

  • 和solr-7.6.0\\dist下的dataimporthandler-7.6.0架包 (注意是mysql驱动和dataimport两个jar包)复制到 C:\solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib


  • 创建data-config.xml文件
  • goods/conf文件夹下创建mysql-db文件夹,然后在mysql-db文件夹中创建data-config.xml文件,文件中添加如下内容

    <?xml version="1.0" encoding="utf-8" ?>
    <dataConfig>
    <dataSource type="JdbcDataSource"
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/sc"
    user="root"
    password="root"
    />

    <document>
    <entity name="goods" query="select goods_id,goods_name,sales_price,goods_img,cid from goods">
    <field column="goods_id" name="id" />
    <field column="goods_name" name="goodsName" />
    <field column="sales_price" name="salesPrice" />
    <field column="goods_img" name="goodsImg" />
    <field column="cid" name="cid" />
    </entity>

    </document>
    </dataConfig>
  • 添加document中的字段
    在managed-schema.xml文件中添加

  • 注意: id,version,root 不能删除

    _text_ 不需要 可以删除

    ```
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <!-- docValues are enabled by default for long type so we don't need to index the version field -->
    <field name="_version_" type="plong" indexed="false" stored="false"/>
    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
    <field name="goodsName" type="text_ik" indexed="true" stored="true" multiValued="false" />
    <field name="salesPrice" type="plong" indexed="true" stored="true" multiValued="false" />
    <field name="goodsImg" type="string" indexed="true" stored="true" multiValued="false" />
    <field name="cid" type="string" indexed="true" stored="true" multiValued="false" />
    ```
  • 导入data-config.xml文件
    在solrconfig.xml文件中添加
  • <requestHandler name="/dataimport" >
    <lst name="defaults">
    <str name="config">mysql-db/data-config.xml</str>
    </lst>
    </requestHandler>
  • 重启solr
  • 导入数据
  • 测试查询
  • 六. ssm中使用solr

  • 添加jar包
  • <!-- solr jar包 -->
    <dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>7.6.0</version>
    </dependency>
  • 在spring.xml中配置
  • <!-- 配置solr客户端对象 -->
    <bean id="httpSolrClient" >
    <constructor-arg name="builder" value="http://localhost:8983/solr/goods" />
    </bean>
  • 修改pojo中goods类
  • 控制层写solr查询操作
  • @RequestMapping("showGoodsByWhere2")
    public String search2(@RequestParam(name = "pageIndex",defaultValue = "1") int pageIndex, int cid,@RequestParam(name = "keyword",defaultValue = "西") String keyword) throws IOException, SolrServerException {
    //创建一个query对象
    SolrQuery solrQuery=new SolrQuery();
    //设置默认的查询范围
    solrQuery.set("df", "goodsName");
    //设置查询条件
    solrQuery.setQuery(keyword+"*");
    //设置过滤条件
    solrQuery.setFilterQueries("cid:"+cid);
    //设置排序条件
    solrQuery.setSort("goodsPrice",ORDER.desc);

    solrQuery.addField("id");
    solrQuery.addField("goodsName");
    solrQuery.addField("salesPrice");
    solrQuery.addField("goodsImg");
    //solrQuery.addField("cid");
    solrQuery.setStart(0);
    //每页显示多少行
    solrQuery.setRows(2);
    //设置高亮(开启)
    solrQuery.setHighlight(true);
    //设置高亮域
    solrQuery.addHighlightField("goodsName");
    //设置高亮前缀
    solrQuery.setHighlightSimplePre("<em>");
    //设置高亮后缀
    solrQuery.setHighlightSimplePost("</em>");

    // 创建组合条件串
    // StringBuilder params = new StringBuilder("cid:" + cid);
    // params.append(" and goodsName:"+keyword);
    // solrQuery.setQuery(params.toString());

    //将查询对象传递到服务器端
    QueryResponse queryResponse= httpSolrClient.query(solrQuery);

    httpSolrClient.commit();

    List<Goods> list= queryResponse.getBeans(Goods.class);

    System.out.println(list.toString());
    // ModelAndView modelAndView=new ModelAndView();
    //modelAndView.addObject("goodsList",list);
    // modelAndView.setViewName("searchList");

    //return modelAndView;
    return "success";
    }
      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/21083.html

      分享给朋友:

      “solr服务器” 的相关文章

      高速稳定,连接全球:日本CN2服务器的终极指南

      在全球化的今天,互联网连接的稳定性和速度已经成为企业及个人用户的首要需求。无论是网络游戏、在线视频、电子商务,还是企业级应用,高速稳定的网络环境都是不可或缺的。而在这一领域,日本CN2服务器以其卓越的表现,成为了众多用户的首选。本文将深入探讨日本CN2服务器的特点、优势以及适用场景,帮助您更好地理解...

      VPS在线测速:如何选择合适的虚拟专用服务器

      在现今的网络环境中,选择合适的VPS(虚拟专用服务器)是每位用户尤其是中小企业和开发者需要重点关注的事项之一。VPS在线测速的重要性体现在很多方面,尤其是在评估服务性能时,测速显得尤为关键。通过测速脚本,用户可以全面了解VPS的网络状况和系统性能,从而在购买时做出更明智的决策。 想象一下,你已经在选...

      选择美国VPS的全面指南与服务商推荐

      美国VPS概述 在全球互联网的高速发展中,虚拟专用服务器(VPS)逐渐成为了网络环境中不可或缺的一部分。我对于VPS的理解,首先是它通过虚拟化技术,将一台物理服务器划分成多个独立的虚拟服务器。用户能够拥有更高的控制权和资源管理能力。这种灵活性和独立性,使得VPS成为了许多中小型企业、开发者和个人用户...

      Wikihost:构建高效知识库的理想WordPress主题

      Wikihost是一个专为WordPress平台设计的知识库主题,目的在于帮助用户轻松创建和管理知识库文章与文档页面。这款主题适合各种类型的网站,从小型企业到大型社区,用户都能通过它建立富有信息性的页面。Wikihost给用户提供了一整套便捷的功能,帮助他们分享知识和信息。 我发现Wikihost的...

      Oracle 免费VPS:轻松入门云计算的最佳选择

      在了解Oracle免费VPS之前,先来看看Oracle Cloud。这是甲骨文公司推出的一项云服务,提供了一系列强大的计算和存储资源。Oracle Cloud的最吸引人的部分是它的免费服务,给用户提供了机会,可以在没有经济负担的情况下体验云计算的强大功能。对于开发者、创业者或只是想进行一些小项目的用...

      优化RackNerd DC2机房 IP使用体验与性能评测

      我最近对RackNerd的DC2机房产生了越来越多的兴趣,特别是位于美国洛杉矶的这座机房。它被誉为RackNerd中中国国内访问速度较快的机房之一,吸引了很多需求高效网络连接的用户。这座机房的地理位置确实蛮不错,靠近美西主干线,对于需要与国内建立连接的网站和应用来说,能带来相对更快的访问速度。 对于...