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:中华”,这是查询是查不到任何东西的,因为需要分词器来操作,没有分词器,默认使用的是完全匹配,所以查不到
    分词器的定义如下,
    1、https://code.google.com/archive/p/ik-analyzer/downloads下载响应的jar包,这里下载的是IKAnalyzer2012FF_u2.jar
    2、将该jar包放到mycore1\lib下面,没有lib文件夹新建一个,然后在solrconfig.xml中配置lib标签的目录如下
        <lib dir="E:/solr/solr_home/mycore1/lib" regex=".*\.jar" /> 
    3、将放入ext.dic、IKAnalyzer.cfg.xml、stopword.dic三个文件放入E:\solr\solr_home\mycore1\conf下
    4、在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",这样说明该属性在建索引和查询时使用分词器,查询结果就可以正常显示
    

转载于:https://my.oschina.net/u/990438/blog/821359

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值