solr for php配置及調(diào)用

solr是一個基于lucene的全文搜索服務器

一隆箩、準備工具

1响驴、tomcat、 jdk
2捶码、solr7.3
3羽氮、mysql-connector-java.jar
4、php-solr擴展
5惫恼、SolrPhpClient

工具包鏈接: https://pan.baidu.com/s/1ByRslAFGn8EU9se5Y1vLCQ 密碼: 6dbi

二档押、服務安裝文件配置

1、安裝java環(huán)境及solr下載;
2令宿、將solr目錄server\solr-webapp\webapp文件夾復制到tomcat的webapps下并修改文件夾名稱為solr叼耙;
3、把solr-7.2.1/server/lib/ext目錄下的所有jar包粒没、solr-7.2.1/dist下的solr-dataimporthandler-6.4.1.jar筛婉、solr-dataimporthandler-extras-6.4.1.jar和solr/server/lib下metrics開頭的5個jar 、mysql-connector-java.jar(mysql驅(qū)動包)粘貼復制到tomcat下的solr項目的WEB-INF/lib目錄下癞松;
4爽撒、在tomcat下的solr項目的WEB-INF下新建classes目錄,然后把solr-6.4.1/server/resources下的log4j.properties粘貼過去拦惋;
5匆浙、把server目錄下的solr文件夾粘貼復制到solr目錄,然后重命名為:solrhome厕妖,作為solr核心文件夾首尼;
6、修改tomcat下的solr項目的WEB-INF/web.xml并注釋掉權限設置

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>F:\solr7\solrhome</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
<!--<security-constraint>
    <web-resource-collection>
      <web-resource-name>Disable TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>-->

7言秸、啟動tomcat 瀏覽器輸入http://127.0.0.1:8080/solr/index.html#/ 顯示solr管理界面即配置完成

三软能、數(shù)據(jù)庫導入并建立中分分詞器

1、將solr7\server\solr\configsets\下的_default文件夾復制到solr7\solrhome下并更改為jun
2举畸、_default的conf目錄下建立一個db-data-config.xml文件
對應solrconfig.xml里修改為db-data-config.xml
3查排、編輯db-data-config.xml文件

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db" user="root" password="" />
    <document>
        <entity name="product" query="select * from product"
                >
            <field column="id" name="id" />
            <field column="title" name="title" />
        </entity>
    </document>
</dataConfig>

4、F:\solr7\contrib\analysis-extras\lucene-libs找到lucene-analyzers-smartcn-7.3.0.jar復制到webapp\wEB-INF\lib下
5抄沮、修改managed-shchema 加入中文配置

<!-- ChineseAnalyzer -->
    <fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
    </fieldType>

6跋核、添加庫


圖片.png

7、選擇Schema配置字段


圖片.png

8叛买、點擊DataImport
圖片.png

9砂代、點擊Query即可看到導入的數(shù)據(jù)


圖片.png
四、php客戶端調(diào)用
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/4/27
 * Time: 13:45
 */
require_once "Solr/Service.php";
class SolrSearch
{
    private static $options = array('hostname' => '127.0.0.1','port' => '8080');


    /**
     * 設置solr庫
     */
    public static function setCore($core)
    {
        if($core) self::$options['path'] = 'solr/'.$core;
    }

    /**
     * php通過solr文件包連接服務器端
     */
/* public static function solr_server(){
        $solr = new Apache_Solr_Service( self::SOLR_HOST, self::SOLR_PORT, self::SOLR_URL );
        if ( ! $solr->ping() ) {
            echo 'Solr service not responding.';
            exit;
        }
    }
*/

    /**
     * 增加solr索引
     * @param $fieldArr 索引字段及值
     * @return bool true
     */
    public static function addDocument($fieldArr=array()){
        $client = new SolrClient(self::$options);
        $doc = new SolrInputDocument();
        foreach($fieldArr as $k => $v){
            $doc->addField($k,$v);
        }
        $client->addDocument($doc);
        $client->commit();
        return true;
    }

    /**
     * 刪除索引
     * @param $id 主鍵id id可以為數(shù)組形式率挣,應用于多選的情況
     * @return bool true
     */
    public static function delDocument($ids){
        $client = new SolrClient(self::$options);
        if(is_array($ids))
            $client->deleteByIds($ids);
        else
            $client->deleteById($ids);
        $client->commit();
        return true;
    }

    /**
     * 查詢數(shù)據(jù)
     * @param $qwhere     關鍵字
     * @param $fqwhere 附加條件刻伊,根據(jù)范圍檢索,適用于數(shù)值型
     * @param $getField    查詢字段
     * @param $sort 排序 array('duration'=>'asc')  asc:升序椒功,desc:降序
     * @param $pageindex   查詢頁數(shù)
     * @param $pagesize    每頁顯示條數(shù)
     */
    public static function selectQuery($qwhere=array(),$fqwhere=array(),$getField=array(),$sort=array(),$pageindex=1,$pagesize=20){
        $client = new SolrClient(self::$options);
        $query = new SolrQuery();
        $sel = '';
        foreach($qwhere as $k => $v){
            $sel .= ' +'.$k.':'.$v;        //對中文分詞的field用這行
//        $sel = "{$k} : \"*{$v}*\"";    //對英文貌似$v兩側(cè)加*號就能模糊搜索了
        }
        $query->setQuery($sel);
        //關鍵字檢索

        //附加條件捶箱,根據(jù)范圍檢索,適用于數(shù)值型
        if($fqwhere){
            $query->setFacet(true);
            foreach($fqwhere as $k => $v)
                $query->addFacetQuery($v);
            //$query->addFacetQuery('price:[* TO 500]');
        }

        //查詢字段
        if($getField){
            foreach($getField as $key => $val)
                $query->addField($val);
        }
        //排序
        if($sort){
            foreach($sort as $k => $v){
                if($v == 'asc')
                    $query->addSortField($k,SolrQuery::ORDER_ASC);
                elseif($v == 'desc')
                    $query->addSortField($k,SolrQuery::ORDER_DESC);
            }
        }
        //分頁
        $query->setStart(self::getPageIndex($pageindex,$pagesize));
        $query->setRows($pagesize);

        $query_response = $client->query($query);
        $response = $query_response->getResponse();
        return $response;
    }

    /**
     * 分頁數(shù)據(jù)處理
     */
    private static function getPageIndex($pageindex,$pagesize){
        if($pageindex<=1)
            $pageindex = 0;
        else
            $pageindex = ($pageindex-1)*$pagesize;
        return $pageindex;
    }
}

SolrSearch::setCore('jun');

//查詢
$q = array(
    'title'=>'星'
);

print_r(SolrSearch::selectQuery($q));



?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末动漾,一起剝皮案震驚了整個濱河市丁屎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旱眯,老刑警劉巖悦屏,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件节沦,死亡現(xiàn)場離奇詭異,居然都是意外死亡础爬,警方通過查閱死者的電腦和手機甫贯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來看蚜,“玉大人叫搁,你說我怎么就攤上這事」┭祝” “怎么了渴逻?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長音诫。 經(jīng)常有香客問我惨奕,道長,這世上最難降的妖魔是什么竭钝? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任梨撞,我火速辦了婚禮,結(jié)果婚禮上香罐,老公的妹妹穿的比我還像新娘卧波。我一直安慰自己,他們只是感情好庇茫,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布港粱。 她就那樣靜靜地躺著,像睡著了一般旦签。 火紅的嫁衣襯著肌膚如雪查坪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天宁炫,我揣著相機與錄音偿曙,去河邊找鬼。 笑死淋淀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的覆醇。 我是一名探鬼主播朵纷,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼永脓!你這毒婦竟也來了袍辞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤常摧,失蹤者是張志新(化名)和其女友劉穎搅吁,沒想到半個月后威创,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡谎懦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年肚豺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片界拦。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡吸申,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出享甸,到底是詐尸還是另有隱情截碴,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布蛉威,位于F島的核電站日丹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚯嫌。R本人自食惡果不足惜哲虾,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齐帚。 院中可真熱鬧妒牙,春花似錦、人聲如沸对妄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剪菱。三九已至摩瞎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孝常,已是汗流浹背旗们。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留构灸,地道東北人上渴。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像喜颁,于是被迫代替她去往敵國和親稠氮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容