A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


一 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"));
        }
   

13 个回复

正序浏览
回复 使用道具 举报
膜拜
回复 使用道具 举报
优秀
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
太详细了,赞赞赞
回复 使用道具 举报
     
回复 使用道具 举报
回复 使用道具 举报
背景还是稳
回复 使用道具 举报
厉害厉害,收藏
回复 使用道具 举报
哇塞
回复 使用道具 举报
棒棒哒
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马