solr的簡單使用

1、解壓solr文件     tar -zxvf solr-4.10.4.tgz

2、啓動

    一、啓動方式一    

    前臺啓動    cd  solr-4.10.4\example      java -jar start.jar  java

    中止  只能kill掉solr進程node

    後臺啓動:java -DSTOP.PORT=8984 -DSTOP.KEY=solr -jar start.jar --daemon &web

    中止:java -DSTOP.PORT=8984 -DSTOP.KEY=solr -jar start.jar --stopapache

    STOP.PORT和STOP.KEY還能夠去solrui界面的java properties欄目中找bootstrap

二、啓動方式二

啓動    solr-4.10.4/bin/solr startapp

中止  只能kill掉solr進程webapp

solr命令講解(solr-4.10.4/bin/solr)

start, stop, restart, healthcheckui

solr start -helpspa

solr start [-f]:啓動solr,默認後臺運行.net

solr start -p <port>:指定solr實例端口

solr start -s <dir>:指定solr的solr.solr.home

solr start -d <dir>:指定solrweb項目根路徑(項目根路徑下必須有webapps/solr.war)

solr -p <port> -V:查看指定solr的運行基本信息

solr -i:查看有多少solr服務正在運行

solr stop -p <port>:中止運行在指定端口的solr服務

solr stop -all:中止全部solr服務

solr COMMAND --help:查看指定命令的幫助文檔

solr腳本底層也是調用的start.jar文件

3、solr查詢界面功能

4、solr的檢索運算符

1. 「:」 指定字段查指定值,如返回全部值*:*

2. 「?」 表示單個任意字符的通配

3. 「*」 表示多個任意字符的通配

4. 布爾操做符AND、&&

5. 布爾操做符OR、||

6. [] 包含範圍檢索,如檢索某價格區間,包含頭尾,price:[0 TO 100],TO 區分大小寫

7. {} 不包含範圍檢索,如檢索某價格區間,不包含頭尾price:{0 TO 100}

5、solr集成IKAnalyzer

一、把IKAnalyzer2012FF_u1.jar包導入solr-web應用下的lib目錄下

    如solr-4.10.4/example/solr-webapp/webapp/WEB-INF/lib

二、把IKAnalyzer.cfg.xml和stopword.dic文件放置到solr-web類路徑下

如 solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes

若是沒有classes文件 本身建立

三、修改schema.xml文件  

<!--配置IK分詞器-->

    <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>

四、在想要添加使用IKAnalyzer的字段的type加上text_ik

如  <field name="name" type="text_ik" indexed="true" stored="true"/>

6、在IKAnalyzer中添加本身的分詞庫

一、新建一個分詞庫.dic的文件   如my.dic    該文件保存格式必須是UTF-8無BOM格式

二、把my.dic文件放置到solr-web類路徑下

如 solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes

三、修改IKAnalyzer.cfg.xml 添加內容  如 <entry key="ext_dict">my.dic;</entry>

7、用java操做solr

package cn.crxy.solr_8;

import static org.junit.Assert.*;

import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.SpellCheckResponse;
import org.apache.solr.client.solrj.response.SpellCheckResponse.Collation;
import org.apache.solr.client.solrj.response.SpellCheckResponse.Correction;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class SolrTest {
    String baseURL = "http://192.168.1.170:8983/solr/collection1";
    HttpSolrServer solrServer = new HttpSolrServer(baseURL );
    
    /**
     * 查詢
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        SolrQuery params = new SolrQuery();
        params.set("q", "*:*");
        QueryResponse response = solrServer.query(params);
        SolrDocumentList results = response.getResults();
        //獲取數據總條數
        //long numFound = results.getNumFound();
        
        long numFound = results.size();
        System.out.println("一共:"+numFound);
        
        
        for (SolrDocument solrDocument : results) {
            Collection<String> fieldNames = solrDocument.getFieldNames();
            for (String field : fieldNames) {
                System.out.println(field+"--"+solrDocument.get(field));
            }
            System.out.println("====================================");
        }
    }
    
    /**
     * 創建索引1
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        SolrInputDocument docs = new SolrInputDocument();
        docs.setField("id", "4");
        docs.setField("name", "crxy");
        solrServer.add(docs );
        //solrServer.commit(true,true,true);
    }
    
    /**
     * 創建索引2
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {
        Person person = new Person();
        person.setId("2");
        person.setName("zs");
        person.setAge("10");
        solrServer.addBean(person);
        solrServer.commit();
    }
    
    /**
     * 刪除
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
        solrServer.deleteById("1");
        //TODO--根據查詢條件查詢數據
        
        solrServer.commit(true,true,true);
    }
    
    /**
     * 拼寫檢查
     * @throws Exception
     */
    @Test
    public void test5() throws Exception {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.set("qt", "/spell");
        solrQuery.set("q", "name:crxx");
        
        QueryResponse response = solrServer.query(solrQuery);
        SolrDocumentList results = response.getResults();
        long numFound = results.getNumFound();
        if(numFound==0){
            System.out.println("拼寫錯誤");
            SpellCheckResponse spellCheckResponse = response.getSpellCheckResponse();
            List<Collation> collatedResults = spellCheckResponse.getCollatedResults();
            for (Collation collation : collatedResults) {
                long numberOfHits = collation.getNumberOfHits();
                System.out.println("推薦詞語的個數:"+numberOfHits);
                
                List<Correction> misspellingsAndCorrections = collation.getMisspellingsAndCorrections();
                for (Correction correction : misspellingsAndCorrections) {
                    String source_data = correction.getOriginal();
                    String current_data = correction.getCorrection();
                    System.out.println("原始:"+source_data+"--推薦:"+current_data);
                }
            }
        }else{
            for (SolrDocument solrDocument : results) {
                Collection<String> fieldNames = solrDocument.getFieldNames();
                for (String field : fieldNames) {
                    System.out.println(field+"--"+solrDocument.get(field));
                }
                System.out.println("====================================");
            }
        }
    }
    
    
    /**
     * 使用solrj操做solrcloud
     * @throws Exception
     */
    @Test
    public void test6() throws Exception {
        
        String zkHost = "192.168.1.170:2181";
        CloudSolrServer solrServer = new CloudSolrServer(zkHost );
        solrServer.setDefaultCollection("collection1");
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.set("q", "*:*");
        QueryResponse response = solrServer.query(solrQuery);
        SolrDocumentList results = response.getResults();
        System.out.println(results.size());   
    }

}
8、SolrCloud 搭建

一、搭建一個zookeeper集羣

參考 https://my.oschina.net/xiaozhou18/blog/787132

二、把 solr-4.10.4 複製到其餘幾臺機器上

三、分別啓動

在第一臺機器 上啓動        命令java  -DzkHost=node22:2181,node33:2181,node44:2181 -DnumShards=2 -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -jar start.jar
在第二臺、第三臺、第四臺機器上 分別執行命令 java   -DzkHost=node22:2181,node33:2181,node44:2181 -jar start.jar     

參數解釋

-Djetty.port:指定jetty的端口

-DzkHost:指定zookeeper的地址

-DnumShards=2 :分片的個數

-Dbootstrap_confdir=./solr/collection1/conf:上傳配置文件

-Dcollection.configName=myconf :爲配置文件起一個名稱

出現以下界面表示啓動成功

相關文章
相關標籤/搜索