亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP使用elasticsearch搜索安裝及分詞方法

zzzmh / 3630人閱讀

摘要:一背景為什么會(huì)用到這個(gè)搜索是因?yàn)槲以诳礊踉频穆┒窗咐龓?kù)時(shí)候,搜索即為不方便。在搜索當(dāng)中分詞插件是中文分詞最好用的一個(gè),安裝也極為方便。那我們選擇用作為分詞器后,它是可以把中華人民共和國(guó)作為一個(gè)詞,把中華作為一個(gè)詞。

一、背景

為什么會(huì)用到這個(gè)ES搜索?
是因?yàn)槲以诳礊踉频穆┒窗咐龓?kù)時(shí)候,搜索即為不方便。

比如說(shuō)說(shuō)我要搜索一個(gè) SQL注入

那mysql匹配的時(shí)候是like模糊匹配,搜索必須要有SQL注入這四個(gè)字,連續(xù)的才能查找到那這樣會(huì)不太方便。

然后我就想著做一個(gè)分詞,搜索起來(lái)會(huì)方便不少,第一個(gè)想到的就是ES搜索了。

怎么去用ES呢?

二、安裝ES搜索

我們只需要一個(gè)JAVA環(huán)境并且把Java的環(huán)境變量配置好,我相信這些JAVA環(huán)境大家之前都配置過(guò),這里不多說(shuō)。

那現(xiàn)在只需要下載ES的文件,也不需要編譯,下載下來(lái)就行了,把他放到一個(gè)目錄。
下載地址: https://www.elastic.co/downlo...

三、 安裝head

head是基于node開(kāi)發(fā)的,所以需要先安裝node
node下載地址:http://cdn.npm.taobao.org/dis...

在電腦任意一個(gè)目錄下(不要在elasticsearch目錄里面),執(zhí)行一下命令,

git clone https://github.com/mobz/elasticsearch-head.git  
cd elasticsearch-head/  
npm install  

3、修改部分配置
修改兩個(gè)地方:
文件:elasticsearch-headGruntfile.js

connect: {
    server: {
        options: {
            port: 9100,
            hostname: "*",
            base: ".",
            keepalive: true
        }
    }
}

增加配置,文件:elasticsearch-5.6.0configelasticsearch.yml

http.cors.enabled: true  
http.cors.allow-origin: "*"  

4、輸入 npm run start 啟動(dòng)

5、訪問(wèn)head管理頁(yè)面: http://localhost:9100/

四、安裝composer

就是我們需要安裝composer,安裝composer干什么呢?

下載地址:https://getcomposer.org/Compo...

下載之后,直接下一步下一步就安裝好了。

因?yàn)槲覀働HP如果調(diào)用ES搜索的接口,我們是需要去下載一個(gè)類庫(kù)。

1. 在當(dāng)前目錄下載composer.phar
curl -sS https://getcomposer.org/installer | php
2. 在當(dāng)前目錄下創(chuàng)建一個(gè)composer.json的文件
{
    "require": {
        "elasticsearch/elasticsearch": "~2.0@beta"
    }
}
3. 安裝依賴
php composer.phar install

五、安裝分詞插件

就是說(shuō)我們需要安裝一個(gè)分詞插件。
在ES搜索當(dāng)中Ik分詞插件是中文分詞最好用的一個(gè),安裝也極為方便。

我們只需要到GitHub上把他對(duì)應(yīng)版本的這個(gè),文件下載下來(lái),然后解壓到ES的插件目錄,然后重新啟動(dòng)一下ES搜索服務(wù),就可以了。

下載地址:https://github.com/medcl/elas...

怎么去驗(yàn)證這個(gè)插件有沒(méi)有安裝成功呢?
我們可以通過(guò)下面的URL,做分詞測(cè)試。
http://localhost:9200/你的庫(kù)名/_analyze?analyzer=ik_max_word&pretty=true&text=中華人民共和國(guó)

我們可以在這個(gè)URL中輸入,中華人民共和國(guó); 默認(rèn)的分詞器他會(huì)把中華人民共和國(guó)分別以以 中、華、人、民、共、和、國(guó)。

那我們選擇用IK作為分詞器后,它是可以把 中華人民共和國(guó) 作為一個(gè)詞,把中華作為一個(gè)詞。

六、導(dǎo)入數(shù)據(jù)

現(xiàn)在說(shuō)一下怎么把數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入到ES中,

首先需要建立這樣一個(gè)庫(kù),
然后把數(shù)據(jù)按照固定的格式插入到ES搜索中。下面是我的一個(gè)代碼示例

 $maxId limit 0,300";
    get_conn();
    @$result_bugs = mysql_query($sql);
    while (@$row = mysql_fetch_assoc(@$result_bugs)) {
        $rtn[] = $row;
    }

    foreach ($rtn as $val) {
        $params = array();
        $params["body"] = array(
            "id" => $val["id"],
            "wybug_id" => $val["wybug_id"],
            "wybug_title" => $val["wybug_title"],
        );
        $params["index"] = "wooyun";
        $params["type"] = "title";
        $client->index($params);
    }

    return (count($rtn) == 300) ? $val["id"] : false;
}

set_time_limit(0);
$client = ElasticsearchClientBuilder::create()->setHosts(["localhost"])->build();
//刪除所有數(shù)據(jù)
$client->indices()->delete(["index" => "wooyun"]);

$a = true;
$maxId = 0;
while ($a) {
    $maxId = create_index($maxId, $client);
    if (empty($maxId)) {
        $a = false;
    }
}
七、查詢數(shù)據(jù)
setHosts(["localhost"])->build();
    //查詢數(shù)據(jù)的拼裝
    $params = array();
    $params["index"] = "wooyun";
    $params["type"] = "title";
    $params["body"]["query"]["match"]["wybug_title"] = $keyword;
    $params["from"] = $page;
    $params["size"] = $size;
    //執(zhí)行查詢
    $rtn = $client->search($params)["hits"];
    //結(jié)果組裝組裝數(shù)據(jù)
    $data["total"] = $rtn["total"];
    $data["lists"] = array_column($rtn["hits"], "_source");
    $data["lists"] = formartData(array_column($data["lists"], "id"));

    return $data;
}

function formartData($ids)
{
    $ids = implode($ids, ",");
    $sql = "select * from bugs where id in($ids)";
    $data = mysql_query($sql);

    $rtn = [];
    while (@$row = mysql_fetch_assoc(@$data)) {
        $rtn[] = $row;
    }

    return $rtn;
}

$q0 = isset($_GET["q"]) ? $_GET["q"] : "SQL注入";
$num = "15"; //每頁(yè)顯示15條
$page = isset($_GET["page"]) ? intval($_GET["page"]) : 1;
$offset = ($page - 1) * $num;
$esData = search($q0, $offset, $num);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30696.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

zzzmh

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<