solr学习_solr学习笔记 - CSDN
精华内容
参与话题
  • Solr基础学习

    2018-07-10 01:11:35
    第一部分:搭建solr环境环境准备 安装环境:win7 Solr下载:http://archive.apache.org/dist/lucene/solr/ 本例使用 solr-6.4.1  JDK 1.8.0_05 Tomcat下载:https://tomcat.apache.org/ 本例使用解压版的apache...

    第一部分:搭建solr环境

    环境准备

      安装环境:win7

      Solr下载:http://archive.apache.org/dist/lucene/solr/  本例使用 solr-6.4.1  

      JDK 1.8.0_05

    Tomcat下载:https://tomcat.apache.org/  本例使用解压版的apache-tomcat-8.5.31

     

    解压solr 6.4.1至桌面,目录结构如下

    binSolr的脚本启动工具目录。

    contrib:放关于solr的扩展。

    dist:在这里能找到Solr的核心JAR包和扩展JAR包。当我们试图把Solr嵌入到某个应用程序的时候会用到核心JAR包。

    distàsolrj-lib:包含构建基于Solr的客户端时会用到的JAR包。

    distàtest-framework:包含测试Solr时候会用到的JAR包。

    docs:该文件夹里面存放的是Solr文档,离线的静态HTML文件,还有API的描述。

    example:包含Solr的简单示例。

    licenses:各种许可和协。

    server:在本地把Solr作为服务运行的必要文件都存放在这里

     

    安装部署步骤如下:

    a.将【solr-6.4.1\server\solr-webapp】下的webapp文件拷贝到E盘下的

    【tomcat-8.5.31\webapps】目录下,并将webapp重命名为solr(可以重命名为取任意名称)。

    b.solr-6.4.1\server\lib\ext下的jar包复制到【solr-tomcat-8.5.31\webappssolr项目下的WEB-INF\lib下。

    c.solr-6.4.1\dist下的solr-dataimporthandler开头的两个jar包复制到

    【solr-tomcat-8.5.31\webappssolr项目下的WEB-INF\lib目录下。

    d.solr-6.4.1\server\lib下的以metrics开头的5jar包复制到

    【solr-tomcat-8.5.31\webappssolr项目下的WEB-INF\lib目录下。

    e.solr-6.4.1\server\resources下的log4j.properties配置文件复制到

    【solr-tomcat-8.5.31\webappssolr项目下的WEB-INF\classes目录下,如果没有classes则新建一个classes文件夹。

    f.接下来创建core目录,在E:\solr-tomcat-8.5.31新建solrHome文件夹,然后将

    solr-6.4.1\server\solr子文件或文件夹复制到solrHome目录下。

    g.修改【solr-tomcat-8.5.31\webappssolr项目下的WEB-INF\web.xml中的一段代码其中<env-entry>这组标签默认是注释掉的,放开注释,修改<env-entry-value>值为 E:\solr-tomcat-8.5.31\solrHome,注释掉<security-constraint>这组标签.

       最后,打开dos命令窗口,进入到E:\solr-tomcat-8.5.31\bin目录下,执行startup.dat,然后打开浏览器http://localhost:8080/solr/index.html 就可以访问solr。

    参考:https://www.cnblogs.com/xiao-zhang-blogs/p/7327814.html

    参考:https://blog.csdn.net/qq_34283987/article/details/77655437


    第二部分 创建索引和插入数据

    建立索引

    a. 先在E:\solr-tomcat-8.5.31\solrHome中建立一个文件夹mySolr(见名知意,做查询时会用到)用于存放索引相关信息,然后将C:\Users\admin\Desktop\solr-6.4.1\example\example-DIH\solr\db下的conf文件夹拷贝到mySolr下。

    b. 然后在solr后台管理界面Core Admin中添加add Core,name和instanceDir的值都是mySolr,点击add Core即可添加成功一个索引.

    插入数据

    1.用solr后台插入数据(以mySolr索引为例)

    进入http://localhost:8080/solr/index.html#/mySolr/documents,document type选择json 或xml(常用的两种类型)。插入的数据有规定,当document type选择json,document(s)多行文本域中就可以进行手动插入数据。如{id:change.me,title:change.me},现举例插入{“id”:”1001”,”title”:”我是一名优秀的中国人”}。当document type选择xml,<doc><field  name="id">change.me</field><field  name="title">change.me</field></doc>,举例如<doc><field  name="id">10002</field><field  name="title">我是一名合格的中国人</field></doc>。注意这里的插入的数据规定在schema.xml(本solr版本在managed-schema.xml中)

    注:1、solr.install.dir表示solrCore的位置,需要根据实际jar包的位置更改jar包引用路径。2、每两个点“..”代表退到上一级目录,所以退了两级目录,到了solr目录,因此上图表示的是在引用的jar包在solr目录下的contrib或者dist目录下。参考https://www.cnblogs.com/cenwei/p/6527081.html

    参考:https://jingyan.baidu.com/article/3052f5a1e0eb6b97f21f865e.html 

    2.从xml文件中导入数据

    solr-6.4.1\exampledocs下的monitor.xml导入到自己建的solr索引中,打开cmd,进入solr\6.4.1\exampledocs下,执行java -Durl=http://localhost:8080/solr/mySolr/update -jar post.jar monitor.xml命令即可

    3.从数据库中批量导入索引数据,我的solr搭建的目录结构。db和dist都是需要新建

    修改几个地方

    1.E:\solr-tomcat-8.5.31\solrHome\mySolr\conf目录下的solrconfig.xml

    2.在solrConfig.xml同级目录下增加data-config.xml文件

    3.solrConfig.xml同级目录下managed-schema文件下增加红色框标记的内容

    参考:https://blog.csdn.net/xiejunjie1/article/details/73967810

    参考:https://blog.csdn.net/wohaqiyi/article/details/78028731

    第三部分 使用IKAnalyzer中文分词

    Jar版本:ik-analyzer-solr-5.*.jar

        a.ik-analyzer-solr开头的两个.jar包拷贝至E:\solr-tomcat-8.5.31\webapps\solr\libs

    b.IKAnalyzer.cfg.xml(配置文件,可以在这里配置停词表和扩展词库)ext.dicstopword.dic三个配置文件拷贝到E:\solr-tomcat-8.5.31\webapps\solr\WEB-INF\classes目录下

    c.E:\solr-tomcat-8.5.31\solrHome\mySolr\conf目录下的managed-schema问件下配置filed-type(field-type必须唯一),然后就可以在field中引用该type。

    d.E:\solr-tomcat-8.5.31\solrHome\mySolr\conf目录下的solrconfig.xml加

    参考:https://blog.csdn.net/linzhiqiang0316/article/details/51554217 

     

    jar版本:ik-analyzer-solr-6.*.jar

    a.IKAnalyzer.cfg.xml(配置文件,可以在这里配置停词表和扩展词库)ext.dicstopword.dic三个配置文件拷贝到E:\solr-tomcat-8.5.31\webapps\solr\WEB-INF\classes目录下。

    b.IKAnalyzer2012_u6.jar 拷贝到E:\solr-tomcat-8.5.31\solrHome\dic目录下

    c.E:\solr-tomcat-8.5.31\solrHome\mySolr\conf目录下的managed-schema问件下配置filed-type(field-type必须唯一),然后就可以在field中引用该type。

    d.E:\solr-tomcat-8.5.31\solrHome\mySolr\conf目录下solrconfig.xml加




    错误提示:

    the JRE_HOME environment variable is not defined correctly This environment variableis needed to run this program.

    描述:我明明java_HOME配置是正确的啊,cmd控制台和me都能正常运行,为什么不行呢?原因:以前版本的tomcat需要JDK,现在的tomcat只要有JRE就可以。去环境变量下配置JRE_HOME(干掉JAVA_HOME,以及classpath中的配置) 


    C:\Users\egrantUser\Desktop\solr-6.4.1\bin>solr.cmd start

    ERROR: Java 1.8 or later is required to run Solr. Current Java version is: 1.7.0_79

    描述:Jdk版本低了,需要换成jdk.1.8

     

    tomcat启动的时候报错:

    java.lang.UnsatisfiedLinkError: Can't load AMD 64-bit .dll on a IA 32-bit' platform

    描述:从错误信息中大致知道跟系统32位还是64位有关,查阅资料发现是jdktomcat冲突了,tomcat64位的,而jdk32位的,所以报错。

     

    至此,一个简单的solr环境就都搭建好了,如果还想建立多个索引,直接将mySolr复制,然后更改mySolr2下的core.properties中的namemySolr2.以此类推。


    展开全文
  • solr8学习

    千次阅读 2019-04-25 17:35:51
    一:Solr简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并...

    一:Solr简介
           Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

         Solr是一个高性能,采用Java5开发,

    Solr

    基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎

    二:Solr服务器的搭建
    步骤:

    (1)从solr官网下载http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.0.0/solr-8.0.0.tgz下载

    (2)配置java环境变量,jdk8

     (3)解压下载的压缩包

    进入bin目录

    启动之后localhost:8983进入管理页面

    点击coreadmin进入创建核心的页面

    点击addCore之前,首先要在 solr文件夹下创建和instanceDir同名的文件夹

    同时把solr-8.0.0\server\solr\configsets\_default下的conf文件夹拷贝到新建的new_core文件夹下,然后点击addcore,则新建成功。

    在solr管理页面的coreselector中就可以找到新建new_core核心。

     

     

     

    三:Solr服务器配置中文分词器
    步骤:

    (1)拷贝中文分词器ik-analyzer-solr5-5.x.jar到server\solr-webapp\webapp\WEB-INF\lib文件夹下

    (2)在Solr中的server\solr-webapp\webapp\WEB-INF下面创建classes文件目录,用于存放中文分词器的分词配置

    ext.dic的内容,比如如下:

    高富帅
    黑马程序员
    二维表
    这样的话,碰到这样的词就不会进行拆分了,所以,一些网络新词就可以在这里进行配置。

    IKAnalyer.cfg.xml文件 

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    <properties>  
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">ext.dic;</entry> 
        
        <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">stopword.dic;</entry> 
        
    </properties>
    stopwords.dic内容:




    a
    an
    and
    are
    as
     
    这样的话,对于上面的字就不会进行显示处理了,因为这些都是没有意义的词汇。

    (3)在核心solr家中,找到配置文件schema.xml,添加中文分词器的配置。

    添加如下内容:

    <!--配置中文分词器-->
        <fieldType name="text_ik" class="solr.TextField">
            <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        </fieldType>
        <!--配置几个域,这几个就支持中文分词了,当然自己根据需求进行创建即可-->
        <field name="title_ik" type="text_ik" indexed="true" stored="true"/>
        <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/
    (4)重启solr start,进行测试是否配置完成。

    (5)访问Solr主页,进行测试

    四:Solr导入数据

      (1)增加jar包,在server\solr\new_core\文件夹下创建lib包,把

    放进去

    (2)创建配置文件

    在server\solr\new_core\conf 中创建data-config.xml文件,

    <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
    <dataSource type="JdbcDataSource"
                driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8"
                user="root"
                password="admin"/>
    <document>
        <entity name="product" query="SELECT id,name FROM product">
        <field column="id" name="id" />
        <field column="name" name="name" />
        </entity>
    </document>
    </dataConfig>
     

    把data-config.xml配置到solrconfig.xml中,

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

    (3)导入数据,

    重新启动solr,在管理页面

     

    entity中就是配置对象。

    点击execute按钮把数据库中数据导入到solr服务器中。可以勾选auto-refresh status进行实时处理。

    至此导入数据完成

    进行测试,但是发现一个问题,就是那么没有出来,只有id。

    最后发现了,原来是我在date-config.xml中配置了name这个字段,在managed-schema没有配置

     <field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    加上这句,最后测试正常了。后来发现这样配置还是有问题,不能检索,如果我name的值是中国人在西边中的瓜,我用中国人来检索却检索不出来,后来发现

    <field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

    中的type应该是中文分词类型。

     

    对于java编程部分,参考上一遍solr文章

    展开全文
  • solr学习总结一>

    2020-10-16 16:05:34
    Solr学习 一、为什么学习solr 1.solr的作用 ​ solr是一个基于Apache Lucene之上的搜索服务器,它是一个开源的、基于Java的信息检索库。它旨在驱动功能强大的文档检索应用程序 -无论您需要根据用户的查询将数据服务...

    Solr学习

    一、为什么学习solr

    1.solr的作用

    ​ solr是一个基于Apache Lucene之上的搜索服务器,它是一个开源的、基于Java的信息检索库。它旨在驱动功能强大的文档检索应用程序 -无论您需要根据用户的查询将数据服务到何处,Solr都可以为您服务。Solr与应用程序的集成以为您服务。

    2.为什么数据库可以模糊查询还需要solr

    ​ select * form sku where sku_name like “%手机%”

    ​ 我们分析一下上面的sql

    ​ 问题:

    ​ 1、这个查询的速度快不快

    ​ 2、这个sku_name加索引有没有效果

    答:

    1. 当数据量很大是,我们的查询速率会很慢
    2. 因为我们模糊查询的左边加了"%",所以索引会失效,进行全表扫描,此时若数据量很大,这条sql执行速度会很慢

    3.solr的采用的方式解决上述问题

    ​ 我们通常数据库中最常用的就是主键索引,通常我们都用id来查询该条数据,而solr的倒排序索引就是通过关键词来查找对应的id,利用id来查找我们需要的数据,不过在solr中每条数据称为文档,下面展示一个形象的图

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIpenbhj-1602658047662)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201012110339835.png)]

    ​ 之所以说上图所示倒排索引是最简单的,是因为这个索引系统只记载了哪些文档包含某个单词,而事实上,索引系统还可以记录除此之外的更多信息。下图是一个相对复杂些的倒排索引,与上图的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。在图5的例子里,单词“创始人”的单词编号为7,对应的倒排列表内容为:(3:1),其中的3代表文档编号为3的文档包含这个单词,数字1代表词频信息,即这个单词在3号文档中只出现过1次,其它单词对应的倒排列表所代表含义与此相同。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FHbdaqzp-1602658047665)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201012110530803.png)]

    还有POS之类的不在过多介绍,有兴趣可以去了解更多。

    二、solr的安装

    1、安装条件

    ​ 因为solr是基于Lucene,而Lucene是java写的,所以solr需要安装jdk,目前我安装的是solr7+版本,jdk需要1.8及以上

    2、下载solr

    在这里插入图片描述

    ​ 下载地址 :https://lucene.apache.org/solr/downloads.html

    3、启动solr

    下载完毕后解压

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzdSdUDJ-1602658047688)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014140409925.png)]

    在solr-7.7.3/bin目录下打开cmd

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-II0isG4a-1602658047690)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014140613870.png)]

    输入:solr start -p端口号(后面的可以不输入,不输入采用默认端口8983)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LU5KaDdo-1602658047696)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014140833660.png)]

    solr stop -p端口号,停止solr

    当你打开浏览器访问:http://localhost:8088会出现一个图形管理界面,此时意味这个solr安装并已启动

    4、solr目录介绍

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IvqxQ3My-1602658047699)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014141523679.png)]

    三、solr的名词解释

    1、名词解释

    • 索引库

      类似于MySQL中的某个表,存放着所有的数据

    • 索引分词

      solr在导入索引库时,会对某些语句进行分词

    • 搜索分词

      solr在搜索索引库时,会对某些语句进行分词

    • 文档

      对应着数据库中某个表中的一条数据

    • 字段

      对应着某条数据的某个字段

    • 和MySQL的数据库做对比

      MySQL solr
      索引库
      文档
      字段

      注:其实索引库对MySQL中的数据库,但solr中没有表这个概念,对应MySQL的表更好理解

    2、配置文件说明

    在 Solr 的目录中,你会发现这些文件:

    solr.xml:为您的 Solr 服务器实例指定配置选项。

    每个 Solr core:

    • core.properties:为每个核心定义特定的属性,例如其名称、核心所属的集合、模式的位置以及其他参数。
    • solrconfig.xml:控制高级行为。例如,您可以为数据目录指定一个备用位置。
    • managed-schema(或用 schema.xml 替代)描述您将要求 Solr 索引的文档。模式将文档定义为字段集合。您可以同时定义字段类型和字段本身。字段类型定义功能强大,包含有关 Solr 如何处理传入字段值和查询值的信息。
    • data/:包含索引文件的目录。

    四、solr索引库创建

    1、使用solr管理页面去创建(不推荐)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IYcuoM7X-1602658047701)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014143408387.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGov9nax-1602658047705)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014143433273.png)]

    此时点击add core会出现上述错误查看目录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1XUSoAV-1602658047710)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014143604131.png)]

    解决上面的问题我们需要

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k48fYoTT-1602658047713)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014143806341.png)]

    再回到控制台重新创建

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pkjYuy3i-1602658047717)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014143840405.png)]

    这个时候就不会再报错,第一个索引库就创建完成了

    2、使用命令创建(推荐)

    tps://img-blog.csdnimg.cn/20201014145247728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA4ODk4Mg==,size_16,color_FFFFFF,t_70#pic_center)

    solr create_core -c coreName

    这样就创建完成了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o4zA6EvZ-1602658047729)(C:\Users\admin\Desktop\学习笔记\solr学习.assets\image-20201014144212857.png)]

    下篇传送门

    展开全文
  • solr学习笔记

    2018-05-27 12:35:53
    仅仅是对一些学习资料的整理和搬运。 学习计划: 1. Solr的安装及配置  a) Solr整合tomcat  b) Solr后台管理功能介绍  c) 配置中文分析器 2. 使用Solr的后台管理索引库  a) 添加文档  b) 删除文档  c...

    仅仅是对一些学习资料的整理和搬运。

    学习计划:

    1. Solr的安装及配置
      a) Solr整合tomcat
      b) Solr后台管理功能介绍
      c) 配置中文分析器
    2. 使用Solr的后台管理索引库
      a) 添加文档
      b) 删除文档
      c) 修改文档
      d) 查询文档
    3. 使用SolrJ管理索引库
      a) 添加文档
      b) 修改文档
      c) 删除文档
      d) 查询文档
    4. 电商搜索案例实现
      a) 案例分析
      b) 案例实现


    需求分析-应用场景

      在一些大型门户网站、电子商务网站等(互联网项目的特点:数据量大,高并发)都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。

    解决方案:使用Lucene实现

      单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。

    解决方案:使用solr实现

      基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。


    什么是solr

      Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
    Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

    Solr与Lucene的区别:

      Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
      Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
      这里写图片描述
      


    solr安装及配置

    solr的下载

      从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
      Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage

    solr的文件夹结构

      将solr-4.10.3.zip解压:
      这里写图片描述
      bin:solr的运行脚本
      contrib:solr的一些软件/插件,用于增强solr的功能。
      dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
      docs:solr的API文档
      example:solr工程的例子目录:
        ● example/solr:
        该目录是一个包含了默认配置信息的Solr的Core目录(solrHome)。
        ● example/multicore:
        该目录包含了在Solr的multicore中设置的多个Core目录。
        ● example/webapps:
         该目录中包括一个solr.war,该war可作为solr的运行实例工程。

      licenses:solr相关的一些许可信息

    运行环境

      solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),这里使用Tocmat作为Servlet容器,环境如下:

      Solr:Solr4.10.3
      Jdk:jdk1.7.0_72
      Tomcat:apache-tomcat-7.0.53

    solr整合tomcat

    Solr Home与SolrCore

      创建一个Solr home目录,SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore,一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore(相互隔离)提供单独的搜索和索引服务。
      example\solr是一个solr home目录结构,如下:
      这里写图片描述
      上图中“collection1”是一个SolrCore(Solr实例)目录 ,目录内容如下所示:
      这里写图片描述
      说明:
      collection1:叫做一个Solr运行实例SolrCore,SolrCore名称不固定,一个solr运行实例对外单独提供索引和搜索接口。
      solrHome中可以创建多个solr运行实例SolrCore。
      一个solr的运行实例对应一个索引目录。
      conf是SolrCore的配置文件目录 。
      data目录存放索引文件需要创建

    整合步骤

    第一步:安装tomcat。D:\temp\apache-tomcat-7.0.53
    第二步:把solr的war包复制到tomcat 的webapp目录下。
      把\solr-4.10.3\dist\solr-4.10.3.war复制到D:\temp\apache-tomcat-7.0.53\webapps下。
      改名为solr.war
    第三步:solr.war解压。使用压缩工具解压或者启动tomcat自动解压。解压之后删除solr.war
    第四步:把\solr-4.10.3\example\lib\ext目录下的所有的jar包(日志包)添加到solr工程中
    第五步:配置solrHomesolrCore
      1)创建一个solrhome(存放solr所有配置文件的一个文件夹)。\solr-4.10.3\example\solr目录就是一个标准的solrhome。
      2)把\solr-4.10.3\example\solr文件夹复制到D:\temp\0108路径下(为了tomcat的性能,不建议放在tomcat),改名为solrhome,改名不是必须的,是为了便于理解。
      3)在solrhome下有一个文件夹叫做collection1这就是一个solrcore。就是一个solr的实例。一个solrcore相当于mysql中一个数据库。Solrcore之间是相互隔离
      i. 在solrcore中有一个文件夹叫做conf,包含了索引solr实例的配置信息。
      ii. 在conf文件夹下有一个solrconfig.xml。配置实例的相关信息。如果使用默认配置可以不用做任何修改。
    Xml的配置信息:
      Lib:solr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有 就创建一个
      dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如 果data文件夹,会自动创建。
      requestHandler
      这里写图片描述
      这里写图片描述
    第六步:告诉solr服务器配置文件也就是solrHome的位置。修改web.xml使用jndi的方式告诉solr服务器。
      Solr/home名称必须是固定的
      这里写图片描述
    第七步:启动tomcat
    第八步:访问http://localhost:8080/solr/

    solr后台管理

    管理界面

      这里写图片描述

    Dashboard

    仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。

    Logging

    Solr运行日志信息

    Cloud

    Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单,如下图是Solr Cloud的管理界面:
      这里写图片描述

    Core Admin

      Solr Core的管理界面。Solr Core 是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,一个Solr工程可以运行多个SolrCore(Solr实例),一个Core对应一个索引目录。

    添加solrcore:
      第一步:复制collection1改名为collection2
      第二步:修改core.properties。name=collection2
      第三步:重启tomcat

    java properties

    Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。

    Tread Dump

    显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。

    Core selector

    选择一个SolrCore进行详细操作,如下:
      这里写图片描述

    Analysis

      这里写图片描述
      通过此界面可以测试索引分析器和搜索分析器的执行情况。

    Dataimport

      可以定义数据导入处理器,从关系数据库将数据导入 到Solr索引库中。

    Document

      通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:
      这里写图片描述
      /update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。

    Query

      这里写图片描述
      通过/select执行搜索索引,必须指定“q”查询条件方可搜索。

    配置中文分析器

    Schema.xml

      schema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括FieldTypesFields和其他的一些缺省设置。
      这里写图片描述

    FieldType域类型定义

      下边“text_general”是Solr默认提供的FieldType,通过它说明FieldType定义的内容:
      这里写图片描述
      FieldType子结点包括:name,class,positionIncrementGap等一些参数:
      name:是这个FieldType的名称
      class:是Solr提供的包solr.TextField,solr.TextField 允许用户通过分析器来定制索引查询分析器包括一个分词器(tokenizer)和多个过滤器(filter)
      positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经验设置为100。

      在FieldType定义的时候最重要的就是定义这个类型的数据建立索引和进行查询的时候要使用的分析器analyzer,包括分词和`过滤“

      索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。
      搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器。

    Field定义

      solr索引字段在solrhome\collection1\conf\schema.xml配置文件中,类似下面这些,包含在<fields>与</fields>之间的。
      在fields结点内定义具体的Field,filed定义包括name,type为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存)multiValued(是否存储多个值)等属性。
      如下:

    <field name="name" type="text_general" indexed="true" stored="true"/>
    <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>

      multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图),通过使用solr查询可以看出返回给客户端是数组:
      这里写图片描述

    uniqueKey

      Solr中默认定义唯一主键key为id域,如下:

    <uniqueKey>id</uniqueKey>

      Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。
      注意在创建索引时必须指定唯一约束。

    copyField复制域

      copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索:
      比如,输入关键字搜索title标题内容content,
      定义title、content、text的域:

    <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
    
    <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
    
    <field name="text" type="text_general" indexed="false" stored="true" multiValued="true"/>

      根据关键字只搜索text域的内容就相当于搜索title和content,将title和content复制到text中,如下:
      这里写图片描述

    dynamicField(动态字段)

      动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。(类似数据库中的模糊匹配like)。
      自定义Field名为:product_title_t,“product_title_t”和scheam.xml中的dynamicField规则匹配成功,如下:

    <dynamicField name="*_t" tyep="text_general" indexed="true" stored="true"/>

      “product_title_t”是以“_t”结尾。
      创建索引:
      这里写图片描述
      搜索索引:
      这里写图片描述

    安装中文分词器

    使用IKAnalyzer中文分析器。

    第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib(solr.war解压目录)目录下。
    第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classpath下。
    第三步:在schema.xml中添加一个自定义的fieldType,使用中文分析器。

    <!-- IKAnalyzer-->
        <fieldType name="text_ik" class="solr.TextField">
          <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        </fieldType>
    

    第四步:定义field,指定field的type属性为text_ik

    <!--IKAnalyzer Field-->
       <field name="title_ik" type="text_ik" indexed="true" stored="true" />
       <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    

    第四步:重启tomcat
    测试:
    这里写图片描述


    索引操作

    索引操纵 CURD(

    界面管理索引库

    添加/更新文档(界面)

    添加单个文档

    这里写图片描述

    批量导入数据

    使用dataimport插件批量导入数据。
    第一步:把dataimport插件依赖的jar包(路径:solr-4.10.3\dist\)添加到solrcore(collection1\lib)
    这里写图片描述
    还需要mysql的数据库驱动。
    第二步:配置solrconfig.mxl文件,添加一个requestHandler
      配置插件生效

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

    第三步:创建一个data-config.xml,保存到collection1\conf\目录下
      指定如何导入数据(sql语句),指明数据库字段和域对象的映射关系

    <?xml version="1.0" encoding="UTF-8" ?>  
    <dataConfig>   
    <dataSource type="JdbcDataSource"   
              driver="com.mysql.jdbc.Driver"   
              url="jdbc:mysql://localhost:3306/lucene"   
              user="root"   
              password="root"/>   
    <document>   
        <entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
             <field column="pid" name="id"/> 
             <field column="name" name="product_name"/> 
             <field column="catalog_name" name="product_catalog_name"/> 
             <field column="price" name="product_price"/> 
             <field column="description" name="product_description"/> 
             <field column="picture" name="product_picture"/> 
        </entity>   
    </document>   
    
    </dataConfig>
    

    第四步:重启tomcat
    第五步:点击“execute”按钮导入数据
    这里写图片描述
    到入数据前会先清空索引库,然后再导入。

    删除文档(界面)

    删除索引格式如下:

    1) 删除制定ID的索引

    <delete>
        <id>8</id>
    </delete>

    2) 删除查询到的索引数据

    <delete>
        <query>product_catalog_name:幽默杂货</query>
    </delete>

    3) 删除所有索引数据

     <delete>
        <query>*:*</query>
    </delete>

    查询索引(界面)

    通过/select搜索索引,Solr制定一些参数完成不同需求的搜索:

    1. q - 查询字符串,必须的,如果查询所有使用:
    这里写图片描述
    2. fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如::
    这里写图片描述
    过滤查询价格从1到20的记录。
    也可以在“q”查询条件中使用product_price:[1 TO 20],如下:
    这里写图片描述
    也可以使用“*”表示无限,例如:
    20以上:product_price:[20 TO *]
    20以下:product_price:[* TO 20]

    3. sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]…。示例:
    这里写图片描述 按价格降序

    4. start - 分页显示使用,开始记录下标,从0开始
    5. rows - 指定返回结果最多有多少条记录,配合start来实现分页。
    这里写图片描述显示前10条。
    6. fl - 指定返回那些字段内容,用逗号或空格分隔多个。
    这里写图片描述 显示商品图片、商品名称、商品价格
    7. df-指定一个默认搜索Field
    这里写图片描述
    也可以在SolrCore目录 中conf/solrconfig.xml文件中指定默认搜索Field,指定后就可以直接在“q”查询条件中输入关键字。
    这里写图片描述
    8. wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。

    9. hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀。
    这里写图片描述

    SolrJ管理索引库

    什么是solrJ

      solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:
      这里写图片描述

    依赖的jar包

    这里写图片描述

    添加文档

    第一步:创建一个java工程
    第二步:导入jar包。包括solrJ的jar包。还需要solr-4.10.3\example\lib\ext路径下的日志包
    这里写图片描述
    第三步:和Solr服务器建立连接HttpSolrServer对象建立连接。
    第四步:创建一个SolrInputDocument对象,然后添加域
    第五步:将SolrInputDocument添加到索引库
    第六步:提交。
    代码实现:

    //向索引库中添加索引
        @Test
        public void addDocument() throws Exception {
            //和solr服务器创建连接
            //参数:solr服务器的地址
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //创建一个文档对象
            SolrInputDocument document = new SolrInputDocument();
            //向文档中添加域
            //第一个参数:域的名称,域的名称必须是在schema.xml中定义的
            //第二个参数:域的值
            document.addField("id", "c0001");
            document.addField("title_ik", "使用solrJ添加的文档");
            document.addField("content_ik", "文档的内容");
            document.addField("product_name", "商品名称");
            //把document对象添加到索引库中
            solrServer.add(document);
            //提交修改
            solrServer.commit();
    
        }
    

    删除文档

    根据id删除

    //删除文档,根据id删除
        @Test
        public void deleteDocumentByid() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //根据id删除文档
            solrServer.deleteById("c0001");
            //提交修改
            solrServer.commit();
        }
    

    根据查询删除

    查询语法完全支持Lucene的查询语法。

    //根据查询条件删除文档
        @Test
        public void deleteDocumentByQuery() throws Exception {
            //创建连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            //根据查询条件删除文档
            solrServer.deleteByQuery("*:*");
            //提交修改
            solrServer.commit();
        }
    

    修改文档

      在solrJ中修改没有对应的update方法,只有add方法,只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。
      

    查询文档

    简单查询

    //查询索引
        @Test
        public void testIndexSearch1() throws Exception{
            //连接solr服务端
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    
            //创建solr查询条件对象
            SolrQuery solrQuery = new SolrQuery();
            //查询所有
            solrQuery.setQuery("*:*");
    
            //查询并获取查询响应对象
            QueryResponse queryResponse = solrServer.query(solrQuery);
            //从查询响应中获取查询结果集对象
            SolrDocumentList results = queryResponse.getResults();
            //打印一共查询到多少条记录,也就是记录总数
            System.out.println("=====count====" + results.getNumFound());
            //遍历查询结果集
            for(SolrDocument doc : results){
                System.out.println("============="+doc.get("id"));
                System.out.println("============="+doc.get("product_name"));
                System.out.println("============="+doc.get("product_price"));
                System.out.println("====================================================");
            }
        }
    

    复杂查询

    其中包含查询、过滤、分页、排序、高亮显示等处理。

    //复杂查询索引
        @Test
        public void testIndexSearch2() throws Exception{
            //连接solr服务端
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    
            //创建solr查询条件对象
            SolrQuery solrQuery = new SolrQuery();
            //查询关键字输入
            solrQuery.setQuery("台灯");
            //设置默认搜索域
            solrQuery.set("df", "product_keywords");
            //设置过滤查询
            solrQuery.addFilterQuery("product_price:[1 TO 100]");
            //设置排序,这里是降序
            solrQuery.setSort("product_price", ORDER.desc);
            //=======设置分页========
            //设置起始条数
            solrQuery.setStart(0);
            //设置查询多少条
            solrQuery.setRows(50);
    
            //========设置高亮显示=======
            //高亮默认是关闭的,所以要手动开启
            solrQuery.setHighlight(true);
            //设置需要高亮显示的域
            solrQuery.addHighlightField("product_name");
            //设置高亮前缀
            solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
            //设置高亮后缀
            solrQuery.setHighlightSimplePost("</span>");
    
            //===================查询并获取查询响应对象=====================================
            QueryResponse queryResponse = solrServer.query(solrQuery);
            //从查询响应中获取查询结果集对象
            SolrDocumentList results = queryResponse.getResults();
            //打印一共查询到多少条记录,也就是记录总数
            System.out.println("=====count====" + results.getNumFound());
            //遍历查询结果集
            for(SolrDocument doc : results){
                System.out.println("============="+doc.get("id"));
                //获取高亮
                Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
                List<String> list = highlighting.get(doc.get("id")).get("product_name");
                if(list != null && list.size() > 0){
                    String hlName = list.get(0);
                    System.out.println("=======high lighting=====" + hlName);
                }
    
                System.out.println("============="+doc.get("product_name"));
                System.out.println("============="+doc.get("product_price"));
                System.out.println("====================================================");
            }
        }

    案例实现

    原型分析

    这里写图片描述

    系统架构

    这里写图片描述

    工程搭建

    创建一个web工程导入jar包
    1、springmvc的相关jar包
    2、solrJ的jar包
    3、Example\lib\ext下的jar包
    这里写图片描述

    设置业务系统Field

    如果不使用Solr提供的Field可以针对具体的业务需要自定义一套Field,如下是商品信息Field:

    <!--product-->
       <field name="product_name" type="text_ik" indexed="true" stored="true"/>
       <field name="product_price"  type="float" indexed="true" stored="true"/>
       <field name="product_description" type="text_ik" indexed="true" stored="false" />
       <field name="product_picture" type="string" indexed="false" stored="true" />
       <field name="product_catalog_name" type="string" indexed="true" stored="true" />
    
       <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
       <copyField source="product_name" dest="product_keywords"/>
       <copyField source="product_description" dest="product_keywords"/>
    

    Dao

    功能:接收service层传递过来的参数,根据参数查询索引库,返回查询结果。
    参数:SolrQuery对象
    返回值:一个商品列表List,还需要返回查询结果的总数量。
    返回:ResultModel
    方法定义:ResultModel queryProduct(SolrQuery query) throws Exception;

    商品对象模型:

    public class ProductModel {
        // 商品编号
        private String pid;
        // 商品名称
        private String name;
        // 商品分类名称
        private String catalog_name;
        // 价格
        private float price;
        // 商品描述
        private String description;
        // 图片名称
        private String picture;
    }
    

    返回值对象模型

    public class ResultModel {
        // 商品列表
        private List<ProductModel> productList;
        // 商品总数
        private Long recordCount;
        // 总页数
        private int pageCount;
        // 当前页
        private int curPage;
    }
    

    dao

    @Repository
    public class ProductDaoImpl implements ProductDao {
    
        @Autowired
        private SolrServer solrServer;
    
        @Override
        public ResultModel queryProduct(SolrQuery query) throws Exception {
    
            ResultModel resultModel  = new ResultModel();
            //根据query对象查询商品列表
            QueryResponse queryResponse = solrServer.query(query);
            SolrDocumentList solrDocumentList = queryResponse.getResults();
            //取查询结果的总数量
            resultModel.setRecordCount(solrDocumentList.getNumFound());
            List<ProductModel> productList = new ArrayList<>();
            //遍历查询结果
            for (SolrDocument solrDocument : solrDocumentList) {
                //取商品信息
                ProductModel productModel = new ProductModel();
                productModel.setPid((String) solrDocument.get("id"));
                //取高亮显示
                String productName = "";
                Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
                List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
                if (null != list) {
                    productName = list.get(0);
                } else {
                    productName = (String) solrDocument.get("product_name");
                }
                productModel.setName(productName);
                productModel.setPrice((float) solrDocument.get("product_price"));
                productModel.setCatalog_name((String) solrDocument.get("product_catalog_name"));
                productModel.setPicture((String) solrDocument.get("product_picture"));
                //添加到商品列表
                productList.add(productModel);
            }
            //商品列表添加到resultmodel中
            resultModel.setProductList(productList);
            return resultModel;
        }
    
    }
    

    Service

    功能:接收action传递过来的参数,根据参数拼装一个查询条件,调用dao层方法,查询商品列表。接收返回的商品列表和商品的总数量,根据每页显示的商品数量计算总页数。
    参数:
    1、查询条件:字符串
    2、商品分类的过滤条件:商品的分类名称,字符串
    3、商品价格区间:传递一个字符串,满足格式:“0-100、101-200、201-*”
    4、排序条件:页面传递过来一个升序或者降序就可以,默认是价格排序。0:升序1:降序
    5、分页信息:每页显示的记录条数创建一个常量60条。传递一个当前页码就可以了。
    返回值:ResultModel

    方法定义:ResultModel queryProduct(String queryString, String caltalog_name, String price, String sort, Integer page) throws Exception;

    @Service
    public class ProductServiceImpl implements ProductService {
    
        @Autowired
        private ProductDao productDao;
    
        @Override
        public ResultModel queryProduct(String queryString, String caltalog_name,
                String price, String sort, Integer page) throws Exception {
            //拼装查询条件
            SolrQuery query = new SolrQuery();
            //查询条件
            if (null != queryString && !"".equals(queryString)) {
                query.setQuery(queryString);
            } else {
                query.setQuery("*:*");
            }
            //商品分类名称过滤
            if (null != caltalog_name && !"".equals(caltalog_name)) {
                query.addFilterQuery("product_catalog_name:" + caltalog_name);
            }
            //价格区间过滤
            if (null != price && !"".equals(price)) {
                String[] strings = price.split("-");
                query.addFilterQuery("product_price:["+strings[0]+" TO "+strings[1]+"]");
            }
            //排序条件
            if ("1".equals(sort)) {
                query.setSort("product_price", ORDER.desc);
            } else {
                query.setSort("product_price", ORDER.asc);
            }
            //分页处理
            if (null == page) {
                page = 1;
            }
            //start
            int start = (page-1) * Commons.PAGE_SIZE;
            query.setStart(start);
            query.setRows(Commons.PAGE_SIZE);
            //设置默认搜索域
            query.set("df", "product_keywords");
            //高亮设置
            query.setHighlight(true);
            query.addHighlightField("product_name");
            query.setHighlightSimplePre("<span style=\"color:red\">");
            query.setHighlightSimplePost("</span>");
    
            //查询商品列表
            ResultModel resultModel = productDao.queryProduct(query);
            //计算总页数
            long recordCount = resultModel.getRecordCount();
            int pages = (int) (recordCount/Commons.PAGE_SIZE);
            if (recordCount % Commons.PAGE_SIZE > 0) {
                pages ++;
            }
            resultModel.setPageCount(pages);
            resultModel.setCurPage(page);
    
            return resultModel;
        }
    
    }
    

    Controller

    功能:接收页面传递过来的参数调用service查询商品列表。将查询结果返回给jsp页面,还需要查询参数的回显。

    参数:
    1、查询条件:字符串
    2、商品分类的过滤条件:商品的分类名称,字符串
    3、商品价格区间:传递一个字符串,满足格式:“0-100、101-200、201-*”
    4、排序条件:页面传递过来一个升序或者降序就可以,默认是价格排序。0:升序1:降序
    5、分页信息:每页显示的记录条数创建一个常量60条。传递一个当前页码就可以了。
    6、Model:相当于request。

    返回结果:String类型,就是一个jsp的名称。

    String queryProduct(String queryString, String caltalog_name, String price, String sort, Integer page, Model model) throws Exception;

    @Controller
    public class ProductAction {
    
        @Autowired
        private ProductService productService;
    
        @RequestMapping("/list")
        public String queryProduct(String queryString, String catalog_name, String price,
                String sort, Integer page, Model model) throws Exception {
            //查询商品列表
            ResultModel resultModel = productService.queryProduct(queryString, catalog_name, price, sort, page);
            //列表传递给jsp
            model.addAttribute("result", resultModel);
            //参数回显
            model.addAttribute("queryString", queryString);
            model.addAttribute("caltalog_name", catalog_name);
            model.addAttribute("price", price);
            model.addAttribute("sort", sort);
            model.addAttribute("page", page);
    
            return "product_list";
        }
    }
    
    展开全文
  • solr完整学习

    千次阅读 2018-06-23 08:48:33
    solr 开发指南1.1 solr 简介 1.1.1 官网介绍Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个...
  • solr学习(一)

    2018-10-07 17:06:57
    1.什么是solr? 2.solr和lucene的区别? solr的目录结构如下:
  • Solr7-4的学习与使用

    2020-04-08 08:04:22
    17年的时候有学习使用过lucene和solr,但是后来也遗忘了,最近公司有个项目需要使用到全文检索,正好也顺便跟着学习一下,使用的版本是Solr7.4的, solr解压之后的目录结构: 各文件夹里面的内容: solr从5版本...
  • solr学习

    2017-03-13 16:32:27
    solr学习
  • Solr学习经验 Solr坑

    2019-04-29 13:21:18
    对于solr的DataImport 其实就是调用数据库连接执行sql进行数据的写入,以便后期来进行数据的查询。 使用方式: 1 打开solr的客户端页面 http://xxx:8983/solr/。 2 建立core目录。 3点击core所对应的Data...
  • Solr学习总结

    2017-08-02 23:38:29
     之前在一个电商项目中使用了solr进行了站内搜索,并且很好的完成了需求,但是的当时没有系统的总结一下,现在回过头来总结一下,以便加深理解  什么是Slor?  Solr是Apache下的一个顶级开源项目,采用的是java...
  • Solr学习总结-附加功能

    千次阅读 2012-09-27 10:50:36
    http://localhost:8983/solr/select?q=name:edition&mlt=true&mlt.fl=name&mlt.mintf=1&mlt.mindf=1 mlt.fl:按照结果文档的哪一个field求相似。 mlt.mintf:结果文档中的本field的某一个词出现的tf大于此值,...
  • 首先,solr是基于java开发的,所以使用的话需要先进行java环境的配置,在Java环境配置好之后就可以去http://www.apache.org/dyn/closer.lua/lucene/solr/5.4.1这里下载solr了,我是在Windows下使用的。 点击进去...
  • Solr学习一:在tomcat中发布solr

    千次阅读 2016-09-26 20:35:09
    准备工作: 1、tomcat版本:apache-tomcat-8.5.5-x64  下载地址:...2、solr版本:solr6.2.0  下载地址:http://mirror.bit.edu.
  • 简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器。Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上, 底层是一个基于Lucene的搜索引擎,还附加一个Solr的基本管理界面。Solr提供HTTP...
  • 经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了。前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet 的基本用法和Query,Facet,...
  • Solr学习三与mysql集成建立索引

    千次阅读 2016-09-09 09:07:41
    目前百度上面关于solr对MySQL的集成一般都是4.0左右。 但是最新的solr的版本已经到了6.X,很多配置都和一起不一样了。所以我今天就和大家聊聊solr6.X,如何进行MYSQL数据库的配置。
  • Solr学习总结-Facet

    2014-07-01 18:11:40
    返回查询集合中指定field的统计情况,例如找到city一样的文档数目: 加入文档 [plain] view plaincopy     1  Company 1  New York      2  ...New Y
  • solr学习资料

    2015-02-12 20:42:52
    http://lucene.apache.org/solr/quickstart.html#indexing-data
  • (一)SOLR学习资料整理——solr简介

    千次阅读 2016-06-13 16:55:44
    Apache Solr 是一个可扩展的,可快速部署的,对搜索海量文本中心的数据和对返回结果做相关性排序方面做了优化的企业级搜索引擎。 二、SOLR特点 可扩展性:Solr可以把建立索引和查询处理的运算分布到一个集群内...
  • 这篇博客含有海量资料,学习solr必备字典 :evil: 大概看完solr就基本上手了。 solr原味资料:http://wiki.apache.org/solr/FrontPage ( http://wiki.apache.org/solr/QueryParametersIndex ...
1 2 3 4 5 ... 20
收藏数 14,806
精华内容 5,922
关键字:

solr学习