elasticsearch搜索引擎簡(jiǎn)易教程(下)

批量操作

首先創(chuàng)建一個(gè)用于演示的索引

原始數(shù)據(jù)

_mget批量查詢

_mget批量查詢

也可以這樣寫(xiě)

另一種寫(xiě)法

bulk批量導(dǎo)入

批量導(dǎo)入可以合并多個(gè)操作,比如index,delete,update,create等等。也可以幫助從一個(gè)索引導(dǎo)入另一個(gè)索引。需要注意的是,每一條數(shù)據(jù)都由兩行構(gòu)成(delete除外),其它命令比如index和create都是由元信息行和數(shù)據(jù)行組成,update比較特殊,它的數(shù)據(jù)行可能是doc,也可能是upset或者script,如果不了解的朋友可以參考前面的update的翻譯。

action_and_meta_data\n

optional_source\n

舉個(gè)例子:

{"index":{"_index":"test","_type":"type1","_id":"1"}}

{"field1":"value1"}

bulk操作

bulk各種操作

各種bulk操作

映射

定義:創(chuàng)建索引的時(shí)候,可以預(yù)先定義字段的類型以及相應(yīng)屬性

elasticsearch會(huì)根據(jù)JSON源數(shù)據(jù)的基礎(chǔ)類型猜測(cè)你想要的字段映射。將輸入的數(shù)據(jù)轉(zhuǎn)變成可搜索的索引項(xiàng)。Mapping就是我們自己定義的字段的數(shù)據(jù)類型,同時(shí)告訴elasticsearch如何索引數(shù)據(jù)以及是否可以被搜索。

作用:會(huì)讓索引建立的更加細(xì)致和完善

類型:靜態(tài)映射和動(dòng)態(tài)映射

內(nèi)置類型

string類型:text,keyword(string類型在es5開(kāi)始已經(jīng)廢棄)

數(shù)字類型:long,integer,short,byte,double,float

日期類型:date

bool類型:boolen

binary類型:binary

復(fù)雜類型:object,nested

geo類型:geo-point,geo-shape

專業(yè)類型:ip,competion

常用屬性

屬性:描述

store:值為yes表示存儲(chǔ),為no表示不存儲(chǔ),默認(rèn)為no,適合所有類型

index:yes表示分析,no表示不分析,默認(rèn)值為true,適合string類型

null_value:如果字段為空,可以設(shè)置一個(gè)默認(rèn)值,比如“NA”,適合所有類型

analyzer:可以設(shè)置索引和搜索時(shí)用的分析器,默認(rèn)使用的是standard分析其,還可以使用whitespace,simple.english

include_in_all:默認(rèn)es為每個(gè)文檔定義一個(gè)特殊域_all,它的作用是讓每個(gè)字段被搜索到,如果不想某個(gè)字段被搜索到,可以設(shè)置為false,適合所有類型

format:時(shí)間格式字符串的模式,適合date類型

創(chuàng)建映射例子:

創(chuàng)建映射

對(duì)應(yīng)這個(gè)映射創(chuàng)建一條數(shù)據(jù)

創(chuàng)建一條數(shù)據(jù)

當(dāng)然,映射也是可以獲取的

獲取映射

查詢

elasticsearch是功能非常強(qiáng)大的搜索引擎,使用它的目的就是為了快速的查詢到需要的數(shù)據(jù)。

查詢分類:

基本查詢:使用elasticsearch內(nèi)置查詢條件進(jìn)行查詢

組合查詢:把多個(gè)查詢組合在一起進(jìn)行復(fù)合查詢

過(guò)濾:查詢同時(shí),通過(guò)filter條件在不影響打分的情況下篩選數(shù)據(jù)

match查詢:會(huì)將被查詢對(duì)象先進(jìn)行分詞處理,在作為關(guān)鍵詞進(jìn)行查詢。如下圖就把title中包含python的數(shù)據(jù)查詢出來(lái)了。

match

我們將title換成python網(wǎng)站,發(fā)現(xiàn)也可以檢索出這兩條信息,原因是match操作會(huì)將title中的字段進(jìn)行分詞,然后作為關(guān)鍵字進(jìn)行搜索,類似于or的關(guān)系。

match搜索

term查詢:會(huì)將被查詢對(duì)象作為一個(gè)關(guān)鍵字直接進(jìn)行查詢,如下圖:

term查詢
term查詢

terms查詢:將對(duì)一組關(guān)鍵字進(jìn)行查詢,如下圖:

terms查詢

_search操作還有兩個(gè)參數(shù)from和size分別表示從第from條數(shù)據(jù)開(kāi)始,返回size條數(shù)據(jù)。

from和size

也可以這樣寫(xiě),返回所以數(shù)據(jù)

all

短語(yǔ)查詢:

會(huì)將被查詢對(duì)象進(jìn)行分詞作為一個(gè)數(shù)據(jù),然后查找滿足這個(gè)數(shù)組中所有關(guān)鍵詞的字段。

slop短語(yǔ)查詢

slop的值表示分詞之間的最大距離

多字段查詢

多字段查詢

一些屬性

store_field

我們還可以設(shè)置store_field,限定只返回哪些字段里store屬性設(shè)置為true的字段

設(shè)置store_field

sort

如圖表示對(duì)“comments”字段表示升序排列,desc換成asc表示降序

sort排序

range

當(dāng)然我們也可以設(shè)置查詢范圍,其中g(shù)te表示大于等于,lte表示小于等于,gt/lt表示大于/小于,boost表示權(quán)重。

組合查詢:

bool查詢

注意,老版本的filtered已經(jīng)被bool替換

先建立測(cè)試數(shù)據(jù)

插入測(cè)試數(shù)據(jù)
header中的測(cè)試數(shù)據(jù)

bool接受四種值:must、filter、should、must_not

filter:字段過(guò)濾,不參與打分

must:數(shù)據(jù)里所有查詢都必須滿足

should:數(shù)據(jù)里所有查詢滿足一個(gè)就行了

must_not:數(shù)據(jù)里所有查詢都必須不滿足

以下查詢等價(jià)于SQL語(yǔ)句“SELECT * FROM testjob WHERE salary=20”

bool查詢

將scrapy中爬取的數(shù)據(jù)寫(xiě)入ES

首先安裝一個(gè)應(yīng)用:elasticsearch-dsl

>>>pip3 install elasticsearch-dsl

以下是文檔中的使用說(shuō)明

使用說(shuō)明

在Scrapy中構(gòu)建數(shù)據(jù)模型

在scrapy項(xiàng)目根目錄下仿照 django的結(jié)構(gòu)構(gòu)建一個(gè)models文件夾,并在文件夾內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)模型文件:

構(gòu)建模型

然后我們運(yùn)行這個(gè)腳本,在head頁(yè)面中就能看到剛創(chuàng)建了一個(gè)對(duì)應(yīng)的索引

然后,我們回到scrapy,打開(kāi)pipeline,寫(xiě)一個(gè)將item中數(shù)據(jù)傳入Doctype保存的邏輯

邏輯

然后在scrapy中執(zhí)行這個(gè)腳本,便能在ES中發(fā)現(xiàn)數(shù)據(jù)。

添加搜索推薦功能:

在需要添加推薦功能的DocType類中添加一個(gè)字段,如下所示:

添加搜索推薦

而在items中則需要添加相應(yīng)的 items搜索建議池

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容