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

相關文章
相關標籤/搜索