摘要:一背景為什么會用到這個搜索是因為我在看烏云的漏洞案例庫時候,搜索即為不方便。在搜索當(dāng)中分詞插件是中文分詞最好用的一個,安裝也極為方便。那我們選擇用作為分詞器后,它是可以把中華人民共和國作為一個詞,把中華作為一個詞。
一、背景
為什么會用到這個ES搜索?
是因為我在看烏云的漏洞案例庫時候,搜索即為不方便。
比如說說我要搜索一個 SQL注入
那mysql匹配的時候是like模糊匹配,搜索必須要有SQL注入這四個字,連續(xù)的才能查找到那這樣會不太方便。
然后我就想著做一個分詞,搜索起來會方便不少,第一個想到的就是ES搜索了。
怎么去用ES呢?
二、安裝ES搜索我們只需要一個JAVA環(huán)境并且把Java的環(huán)境變量配置好,我相信這些JAVA環(huán)境大家之前都配置過,這里不多說。
那現(xiàn)在只需要下載ES的文件,也不需要編譯,下載下來就行了,把他放到一個目錄。
下載地址: https://www.elastic.co/downlo...
head是基于node開發(fā)的,所以需要先安裝node
node下載地址:http://cdn.npm.taobao.org/dis...
在電腦任意一個目錄下(不要在elasticsearch目錄里面),執(zhí)行一下命令,
git clone https://github.com/mobz/elasticsearch-head.git cd elasticsearch-head/ npm install
3、修改部分配置
修改兩個地方:
文件: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 啟動
5、訪問head管理頁面: http://localhost:9100/
四、安裝composer就是我們需要安裝composer,安裝composer干什么呢?
下載地址:https://getcomposer.org/Compo...
下載之后,直接下一步下一步就安裝好了。
因為我們PHP如果調(diào)用ES搜索的接口,我們是需要去下載一個類庫。
curl -sS https://getcomposer.org/installer | php
{ "require": { "elasticsearch/elasticsearch": "~2.0@beta" } }
php composer.phar install五、安裝分詞插件
就是說我們需要安裝一個分詞插件。
在ES搜索當(dāng)中Ik分詞插件是中文分詞最好用的一個,安裝也極為方便。
我們只需要到GitHub上把他對應(yīng)版本的這個,文件下載下來,然后解壓到ES的插件目錄,然后重新啟動一下ES搜索服務(wù),就可以了。
下載地址:https://github.com/medcl/elas...
怎么去驗證這個插件有沒有安裝成功呢?
我們可以通過下面的URL,做分詞測試。
http://localhost:9200/你的庫名/_analyze?analyzer=ik_max_word&pretty=true&text=中華人民共和國
我們可以在這個URL中輸入,中華人民共和國; 默認(rèn)的分詞器他會把中華人民共和國分別以以 中、華、人、民、共、和、國。
那我們選擇用IK作為分詞器后,它是可以把 中華人民共和國 作為一個詞,把中華作為一個詞。
六、導(dǎo)入數(shù)據(jù)現(xiàn)在說一下怎么把數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到ES中,
首先需要建立這樣一個庫,
然后把數(shù)據(jù)按照固定的格式插入到ES搜索中。下面是我的一個代碼示例
$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"; //每頁顯示15條 $page = isset($_GET["page"]) ? intval($_GET["page"]) : 1; $offset = ($page - 1) * $num; $esData = search($q0, $offset, $num);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30696.html
閱讀 2142·2023-04-26 00:00
閱讀 3239·2021-09-24 10:37
閱讀 3528·2021-09-07 09:58
閱讀 1517·2019-08-30 15:56
閱讀 2217·2019-08-30 13:11
閱讀 2311·2019-08-29 16:38
閱讀 959·2019-08-29 12:58
閱讀 1876·2019-08-27 10:54