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

_mget批量查詢

也可以這樣寫(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各種操作

映射
定義:創(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)建映射例子:

對(duì)應(yīng)這個(gè)映射創(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)了。

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

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


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

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

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

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

slop的值表示分詞之間的最大距離
多字段查詢

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

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

range
當(dāng)然我們也可以設(shè)置查詢范圍,其中g(shù)te表示大于等于,lte表示小于等于,gt/lt表示大于/小于,boost表示權(quán)重。
組合查詢:
bool查詢
注意,老版本的filtered已經(jīng)被bool替換
先建立測(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”

將scrapy中爬取的數(shù)據(jù)寫(xiě)入ES
首先安裝一個(gè)應(yīng)用:elasticsearch-dsl
>>>pip3 install elasticsearch-dsl
以下是文檔中的使用說(shuō)明

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


然后我們運(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搜索建議池