通過訪問IP:5601即可

注:下列所有操作可結合elasticsearch-head進行學習
索引的創建刪除操作
索引其實也可以理解成是一張表
索引創建


索引創建並賦值


索引創建及定義屬性

這里會涉及type為text類型,除了text類型,對於字符串還可以分配keyword類型,二者區別如下:
-
keyword類型的詞語會被當成一個整體存儲
-
text類型的詞語則會被分詞器拆分進行存儲,中文是單個存儲,英文是按照空格進行,在我們進行查找的時候默認都會進行拆分,這里的拆分規則和分詞器字典無關
索引刪除

索引文檔的增刪改操作
增加索引文檔
注:id需唯一,如果指向的是已存在的id,則會變為修改操作


修改索引文檔
雖然使用增加索引的方式也可以實現索引文檔的修改,但是其實ES也提供了update方法來進行修改

刪除索引文檔
其實刪除索引和刪除索引文檔的區別就在於是否准確指定到具體的id,未指定則就會刪除其索引

索引文檔的簡單查詢

以下所有查詢操作都基於該索引進行查詢
索引文檔的條件查詢
首先需要了解一點,我們的數據存儲形式,在不考慮分詞器的情況下
通過_analyze分析,默認text的存儲形式是進行拆分存儲,而keyword是不會進行拆分存儲,這個其實上方創建索引並賦值時就有說明


然后再來理解下Match和Term的區別
Match是模糊查詢
Match查詢時,我們的搜索詞將會被分詞進行查詢
- 當查詢text時,由於我們一句話是會拆分存儲,搜索詞也會被分詞查詢,所以只要包含任意字的都會被查出,也就是模糊匹配
- 當查詢keyword時,由於我們一句話是不會被拆分存儲,雖然搜索詞分詞了,但是因為存儲詞沒有進行拆分,搜索詞又必須對應上存儲詞,所以間接就成了精確匹配
Term是精確查詢
Term查詢時,我們的搜索詞將不會被分詞進行查詢
- 當查詢text時,由於我們一句話是會拆分存儲,但是我們的搜索詞又不會被分詞,所以這時候我們只有單個字進行查詢時才對應得上存儲詞的結果,間接也就成為了模糊匹配
- 當查詢keyword時,由於我們一句話是不會被拆分存儲,我們的搜索詞也不會被分詞,所以該情況就是精確匹配
總結
- 查詢keyword:Match和Term查詢都需要精確匹配
- 查詢text:Match會進行分詞查詢,模糊匹配。Term只能通過單個字去進行查詢,也是模糊匹配
注:漢語是一個字一個字分組,英文的話是以空格進行分組
通過下列例子可以進行更好的了解
Match模糊查詢
可以看出我們的搜索詞是被分詞進行查詢的,又因為text也是拆分的,所以包含”王“和包含“明"的數據都被查出來了

加上keyword后,雖然我們也是分詞查詢,但是索引數據是不拆分存儲的,所以數據無法被查出來

更換成別的查詢條件后,可以發現,我們分詞查詢必須完全對應分詞存儲的數據,數據才會被查出來,也就是精確匹配

Term精確查詢
可以看出,我們不分詞查詢,查分詞存儲,通過以下方式,是一個都無法對應上的

只有條件為單個字的時候才可以對應上

keyword的話,搜索詞不分詞,存儲詞不拆分,就只能是精確匹配了

其他方法說明
_source和sort
_source代表只輸出指定屬性,sort代表按照指定屬性排序,from代表從第幾個數據開始,size代表輸出幾個

Bool多條件查詢(must_not、must、should、filter)
通過bool可以進行多條件查詢,must_not代表不匹配,must代表必須匹配,should代表只要有其中一個條件匹配即可,filter代表條件過濾器
must

must_not

filter
過濾出age大於10小於16的

should

should使用注意事項
當should和must或filter一起使用時,should就會失效,具體可參考該博客:elasticsearch bool中should must聯用問題
