黑马程序员技术交流社区

标题: 【太原校区】关于solr的介绍和使用 [打印本页]

作者: 王高飞    时间: 2018-12-10 16:02
标题: 【太原校区】关于solr的介绍和使用

一 solr:
    1 是什么:
     Lucene是API,类库,solr是基于Lucene开发一个web项目 它是基于Lucene的全文搜索服务器
    2 Solr与Lucene的区别:
    Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,
        Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,
        以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
    Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,
        通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
    3 直接启动solr:内部集成了jetty服务器,所以可以直接启动。
        在solr的bin目录下运行  solr.cmd start -p 8983   
        在solr的bin目录下运行  solr.cmd stop -p port即可关闭指定端口。
    4 solr可以借助tomcat启动,把solr的war部署到tomcat,下面做详细讲解
二 安装配置solr
    1 准备一个干净的tomcat 为了避免其他项目干扰 重新解压一个tomcat
    2 把solr的工程war包(solr-4.10.3\dist\solr-4.10.3.war)拷贝到tomcat的webapps文件夹下
    3 启动tomcat  会自动解压war成项目
    4 配置solrHome,就相当于是配置索引库位置
       1 把solr-4.10.3\example\solr下的所有文件拷贝到指定的位置D:\tools\SolrHome。
       2 配置solr项目和solrHome的关系:修改solr项目的web.xml的第43行 到指定的外置 打开注解。
       3 在solr项目下添加运行扩展包:日志包,ik分词器。
       4 添加classes文件,ik的配置文件等。
    5 重启启动tomcat
    6 浏览器访问   localhost:8080/solr
   
    solr的目录结构:
            bin:solr的运行脚本
            contrib:solr的一些贡献软件/插件,用于增强solr的功能。
            dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
            docs:solr的API文档
            example:solr工程的例子目录:
            example/solr:
                该目录是一个包含了默认配置信息的Solr的Core目录。
            example/multicore:
                该目录包含了在Solr的multicore中设置的多个Core目录。
            example/webapps:
                该目录中包括一个solr.war,该war可作为solr的运行实例工程。
            licenses:solr相关的一些许可信息
            
    SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件(索引库),Solr实例就是SolrCore,
            一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
            collection1:叫做一个Solr运行实例SolrCore,SolrCore名称不固定,一个solr运行实例对外单独提供索引和搜索接口。
            solrHome中可以创建多个solr运行实例SolrCore。
            一个solr的运行实例对应一个索引目录。
            conf是SolrCore的配置文件目录。
                conf文件夹下有一个solrconfig.xml。配置本实例的相关信息。如果使用默认配置可以不用做任何修改。
            data目录存放索引文件需要创建
            
    浏览器访问项目solr进入管理界面:
            1 Dashboard
             仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
            2 Logging
             Solr运行日志信息 黄色警告没关系
            3 Core Admin
                Solr Core的管理界面。Solr Core是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,
                一个Solr工程可以运行多个SolrCore(Solr实例),一个Core对应一个索引目录。
                添加solrcore:不要使用页面上的Add Core
                第一步:复制collection1改名为collection2
                第二步:修改core.properties 中 name=collection2
                第三步:重启tomcat
            4 java properties
              Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
            5 Tread Dump
              显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
            6 Core selector
              选择一个SolrCore实例进行详细操作:
                overView:概述
                Analysis: 通过此界面可以测试索引分析器和搜索分析器的执行情况。solr中内置了很多的域名
                          注意:solr中的域名必须是先定义后使用的
                Dataimport:数据导入 可以定义数据导入处理器,从关系数据库将数据导入 到Solr索引库中
                Document:通过此菜单可以创建索引、更新索引、删除索引  /update不用动 json数据
                Files:读取的本solrCore实例配置文件
                ping:solr项目是否正常运行着 正常会在后面括号显示一个毫秒值
                plugins:插件
                query:做查询操作
                replication:重置
五 一个solr core 相当于 mysql的一个database 每个项目不同的
     添加solrcore:不要使用页面上的Add Core
                第一步:复制collection1改名为collection2
                第二步:修改core.properties 中 name=collection2
                第三步:重启tomcat
               
三 使用solr控制台操作增删改查:
1 添加和修改 使用json格式
    1 solr中的域名是先定义后使用的 未定义的域不能直接使用添加
    2 在solr上添加文档的时候 一定要有id域  
       lucene中不用添加id 是自动生成的
    3 /update表示更新索引 solr默认根据id(唯一约束域)来更新Document的内容 只要id相同就是被修改
                            如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
2 删除 使用xml文件格式
    1 删除指定ID的索引
        <delete>
            <id>8</id>
        </delete>
        <commit/>
    2 删除查询到的索引数据
        <delete>
            <query>name:zhangsan</query>
        </delete>
        <commit/>
    3 删除所有索引数据
        <delete>
            <query>*:*</query>
        </delete>
        <commit/>

3 查询
  通过/select执行搜索索引,必须指定“q”查询条件(查询表达式)方可搜索
        *:*:查询所有
        q:查询条件  
        fq:过滤掉查询结果中id为1的  id:1 在q查询符合结果中同时是fq查询符合的
        sort: 按照id升序 id asc/  
        start,rows:分页
        fl:id title 显示要显示的列/域
        df:可以指定默认查询的域 查询条件就可以简写了
        wt:写出的数据格式 json xml等
        hl:enable highlight 高亮显示
           fl:要高亮显示的列
           hl.simple.pre:开始标签 <span color="red">
           hl.simple.post:</post>
四 java代码操作solr---- 使用solrJ
    SolrJ:solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,
          通过SolrJ的API接口操作Solr服务
    1 创建工程
    2 添加jar
         solrJ核心包solr-4.10.3\dist\solr-solrj-4.10.3.jar、
         solrJ扩展包solr-4.10.3\dist\solrj-lib下的所有
         solr的扩展包solr-4.10.3\example\lib\ext下的所有的日志文件
    3 和Solr服务器建立连接。HttpSolrServer对象建立连接。做增删改查操作
    4 创建一个SolrInputDocument对象,然后添加域。
     添加:
        //和solr服务器创建连接
        //参数:solr服务器的地址
        SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
        //创建一个文档对象
        SolrInputDocument document = new SolrInputDocument();
        //向文档中添加域
        //第一个参数:域的名称,域的名称必须是在schema.xml中定义的
        //第二个参数:域的值 复制域的内容不会存储
        document.addField("id", "c0001");
        document.addField("title", "使用solrJ添加的文档");
        document.addField("content", "文档的内容");
        document.addField("name", "商品名称");
        //把document对象添加到索引库中
        solrServer.add(document);
        //提交修改
        solrServer.commit();
    删除:
        //创建连接
        SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
        //根据id删除文档  根据条件删除文档
        solrServer.deleteById("c0001")/solrServer.deleteByQuery("id:5");
        //提交修改
        solrServer.commit();
    修改:
        在solrJ中修改没有对应的update方法,只有add方法
        只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加的。
    查询:
        //创建连接
        SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
        //创建一个query对象
        SolrQuery query = new SolrQuery();
        //设置查询条件
        query.setQuery("*:*");
        //执行查询
        QueryResponse queryResponse = solrServer.query(query);
        //取查询结果 ArrayList的子类 遍历同ArrayList
        SolrDocumentList solrDocumentList = queryResponse.getResults();
        //共查询到商品数量
        System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
        //遍历查询的结果
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("name"));
            System.out.println(solrDocument.get("content"));
        }
   

作者: 阿星    时间: 2018-12-10 16:53

作者: 张兆秋    时间: 2018-12-12 16:29
棒棒哒
作者: cuichang1    时间: 2018-12-12 16:30
哇塞
作者: miaohangbo    时间: 2018-12-12 16:30
厉害厉害,收藏
作者: 达摩侠    时间: 2018-12-12 16:54
背景还是稳

作者: Vicky韦    时间: 2018-12-12 17:04

作者: 张志辉    时间: 2018-12-12 17:15
     
作者: Julien27    时间: 2018-12-12 17:16
太详细了,赞赞赞
作者: liuchengwei1    时间: 2018-12-13 09:23

作者: liudongjie    时间: 2018-12-13 13:28

作者: 郝永亮    时间: 2018-12-19 13:36
优秀
作者: 赵国旺    时间: 2019-1-16 11:06
膜拜
作者: 吕小布735    时间: 2019-1-17 08:44





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2