记docker+solr+oracle实现查询分页

        最近在做的项目,因为涉及到某些表的数据量会有百万级,首先想到的是进行分表(sharding-jdbc)。但经过一番尝试后,还是选择docker+solr对数据进行查询分页。

Solr是什么?

        Solr 是基于 Lucene 的面向企业搜索的 web 应用 Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接 口。可以通过 http 请求提交一定格式的 XML 文件,生成索引;也 可以通过 Http Get 操作提出查找请求,并得到 xml/json 格式的返回结果。Solr 是一个高性能,采用 Java5 开发,基于 Lucene 的全文搜索服务器。同时对其进行 了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能 进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文检索引擎。 文档通过 Http 利用 XML 加到一个搜索集合中。查询该集合也是通过 http 收到一个 XML/JSON 响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高 亮显示搜索结果,通过索引复制来提高可用性,提供一套强大 Data Schema 来定义字段, 类型和设置文本分析,提供基于 Web 的管理界面等。

与ElasticSearch(ES)相比,为什么选择solr?

  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式。
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。此次项目对于实时搜索要求不高。
  • Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
  • 在测试环境上用docker部署了es,把服务器弄崩了,运行环境要求还是比较高的。solr相比于es较轻。

下载安装、配置ik、索引数据导入

1、下载镜像,选择8.1.1版本

      docker pull solr:8.1.1

2、可以选择docker-compose启动,此处选择run启动了一个名为solr 的容器,将主机的端口8983映射到容器中的端口8983,-d表示已守护进程deamon的方式运行

      docker run -it -d -p 8983:8983 --name solr solr:8.1.1

启动成功后,访问http://ip:8983/solr/

3、创建core,相当于关系型数据库中表的概念。

上述错误是因为文件不存在引起的。    

进入容器:

docker exec -it --user=root solr /bin/bash

复制默认配置文件:

cp -r /opt/solr/server/solr/configsets/_default/conf  /var/solr/data/medical_verify/

之后再创建就可以成功:

4、运行8.1.1版本的solr,配置文件的挂载自动是做好的,测试过7.4版本的是没有的需要自己-v。

docker inspect solr

进入到宿主机的source目录,发现solr容器中的var/solr配置文件都在此

5、配置ik分词:因为solr默认的分词处理没有很好的将搜索语句进行分词,所以需要配置ik。

准备ik包:ik-analyzer-solr.jar 适用7或者8版本solr

百度网盘地址:https://pan.baidu.com/s/17Kr31ueRq_IreoOhGSP4pw  提取码:lpcl

下载后拷贝到:

docker cp ./ik-analyzer-solr.jar solr:/opt/solr/server/solr-webapp/web-app/WEB-INF/lib

进入{source}/data/core_medical/conf修改managed-schema,新增如下内容:

<fieldType name ="text_ik" class ="solr.TextField">        
     <!-- 索引时候的分词器-->          
    <analyzer type ="index" isMaxWordLength ="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>          
    <!--查询时候的分词器-->        
    <analyzer type ="query" isMaxWordLength ="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>    
</fieldType>

进入{source}/data/core_medical/conf修改solrconfig.xml,新增标红部分内容:

<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="ik-analyzer-solr.jar" />

按下Reload键重启:

此时进行到此core的分析可以看到出现了text_ik选项:

6、导入数据,此处是以oracle为例:

没有配置DataImportHandler 时会出现如下页面:

进入{source}/data/core_medical/conf修改solrconfig.xml,新增如何下内容:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">       
    <lst name="defaults">           
        <str name="config">medical-config.xml</str>       
    </lst>   
</requestHandler>

新建文件:medical_verify.xml

修改managed-schema文件,增加fileId:

  • name : 字段的名称
  • type : 字段的类型
  • indexed :是否索引,索引的话就能查询到,否则,搜索的时候,不会出现
  • stored : 是否存储到索引库里面
  • required:是否必须
  • multiValued:是否多个值
  • Unique:字段是否可以重复

重启core后,进行数据导入

进入到查询页面,可以看到数据已经导入:       

       q      查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,
  fl      指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort
  start   返回结果的第几条记录开始,一般分页用,默认0开始
  rows    指定返回结果最多有多少条记录,默认值为 10,配合start实现分页
  sort    排序方式,例如id  desc 表示按照 “id” 降序
  wt  (writer type)       指定输出格式,有 xml, json, php等
  fq (filter query)    过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。
  df                      默认的查询字段,一般默认指定。
  qt (query type)      指定那个类型来处理查询请求,一般不用指定,默认是standard。
  indent                  返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试      json,php,phps,ruby输出才有必要用这个参数。
  version                 查询语法的版本,建议不使用它,由服务器指定默认值。

以上就是solr的安装、配置、注意事项的说明。仅供日后方便查看,有不足的地方请勿喷。

java部分,使用solrj,对索引数据进行检索分页,将在下篇中记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值