solr使用总结

Solr简介
    Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示而且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,并且附带了一个基于 HTTP 的管理界面。
    
    Solr在使用过程汇总也有增删查的功能,具体以下
增长:
    增长就是增长索引,将须要添加的内容添加至指定的solr文件,假设目前已有一个solr文件(E:\solr\solr_home\mycore1)
    //引入的包以下
    import org.apache.solr.client.solrj.SolrClient;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.client.solrj.response.UpdateResponse;
    import org.apache.solr.common.SolrInputDocument;
    
    String url = "http://localhost:8080/solr/mycore1"; 
    SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
    //server的获取还能够经过如下方式
    //SolrDispatchFilter sdf = (SolrDispatchFilter) servlet.getAttribute("SolrRequestFilter");
    //SolrClient server = new EmbeddedSolrServer(sdf.getCores(), "mycore1"); //mycore1表示solr的名称
    //建立要添加的doc
    SolrInputDocument doc1 = new SolrInputDocument();  
    doc1.addField("id","1");  
    doc1.addField("title","广东科技公司");  
    doc1.addField("descr","郑州易网科技有限公司是一家以信息技术服务为主导、立足于高科技领域的前沿,");  
    
    SolrInputDocument doc2 = new SolrInputDocument();  
    doc2.addField("id","2");  
    doc2.addField("title","广西工业园");  
    doc2.addField("descr","双喜工业园 项目简介 双喜工业园 项目由青州市双喜家具备限公司与广州普生生物); 
    
    //将doc加入值docs集合中
    List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();  
    docs.add(doc1);  
    docs.add(doc2); 
    
     try {
        UpdateResponse response = server.add(docs);//将docs添加
        server.commit(); //提交代码
    } catch (SolrServerException | IOException e) {
        e.printStackTrace();
    }  
        
        
//删除索引
    String url = "http://localhost:8080/solr/mycore1"; 
    SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
    server.deleteByQuery( "*:*" );//删除全部索引
    server.deleteById("1");//根据id删除索引
    
//查询
    String url = "http://localhost:8080/solr/mycore1"; 
    SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
    String queryStr="title:科技";//模糊匹配匹配
    //若是查询条件有多个,可使用String queryStr="title:科技  OR descr:科技";或者AND关键字等匹配多个条件
    SolrQuery query = new SolrQuery(queryStr);
    //若是须要高亮显示
    query.setHighlight(true);//设置高亮
    query.addHighlightField("title");//设置哪一个字段高亮显示,多个字段高亮,中间用逗号隔开query.addHighlightField("title,descr");
    //在solr6.3版本中,在solrconfig.xml中,已经设置了高亮的条件,在 <searchComponent class="solr.HighlightComponent" //name="highlight">标签中,若是须要只须要修改相关标签的内容便可,具体的每一个的意思,网上有不少
    //如hl.fragsize表明最大返回字符数(好比为50),hl.regex.slop默认值为0.6,它表示显示的字符数范围为(50-50*0.6至50+50*0.6)
    QueryResponse response = server.query(query);
    SolrDocumentList docs = response.getResults(); 
    System.out.println("文档个数:" + docs.getNumFound());  
    
    //下面显示高亮的结果值
    Map<String, Map<String, List<String>>> map = response.getHighlighting();//获取高亮的内容
        for (SolrDocument doc : docs) {
            System.out.println(doc.getFieldValue("id")+"="+doc.getFieldValue("descr"));//非高亮的查询结果
            if (null != map) {
                System.out.println(map.get(doc.getFieldValue("id").toString()));//高亮的结果值中,最外层map的key就是id值
            }
        }
        
    注:在添加索引时,有id、title、descr三个字段,这三个字段必须出如今managerd-schema中,而且id必须设置为惟一标识
    <uniqueKey>id</uniqueKey>    
    <field name="descr" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />//name值具备惟一性
    
    查询的时候若是想要模糊匹配,好比title值为“中华人民共和国”,查询的条件为“title:中华”,这是查询是查不到任何东西的,由于须要分词器来操做,没有分词器,默认使用的是彻底匹配,因此查不到
    分词器的定义以下,
    一、https://code.google.com/archive/p/ik-analyzer/downloads下载响应的jar包,这里下载的是IKAnalyzer2012FF_u2.jar
    二、将该jar包放到mycore1\lib下面,没有lib文件夹新建一个,而后在solrconfig.xml中配置lib标签的目录以下
        <lib dir="E:/solr/solr_home/mycore1/lib" regex=".*\.jar" /> 
    三、将放入ext.dic、IKAnalyzer.cfg.xml、stopword.dic三个文件放入E:\solr\solr_home\mycore1\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>  
    以上是定义一个分词器,定义完成以后,在solr页面analysis下面分词是就能看到text_ik命名的分词器
    凡是要使用分词器的属性,如上文中定义的descr,须要增长type="text_ik",这样说明该属性在建索引和查询时使用分词器,查询结果就能够正常显示
    apache

相关文章
相关标签/搜索