一贸人、RESTful接口使用方法
? ? RESTful接口URL的格式:
? ? http://localhost:9200///[]
? ? 其中index间景、type是必須提供的。id是可選的艺智,不提供es會(huì)自動(dòng)生成倘要。
二、新建數(shù)據(jù)
? ? 把一條數(shù)據(jù)提交到ES中:
? ? url中/bookshelf/book/1表示bookshelf是index十拣,book是type封拧,1是id
? ? 請求體中的json即為需要插入的數(shù)據(jù)
三、查詢數(shù)據(jù)
? ? 1夭问、簡單查詢
? ? 2泽西、條件查詢
? ??head插件里的簡單查詢頁簽,也有各種條件組合查詢缰趋,勾選顯示查詢語句然后查詢捧杉,大部分查詢操作都在里面。
? ? 內(nèi)容轉(zhuǎn)自https://www.cnblogs.com/yjf512/p/4897294.html?(以下查詢json都可以放入復(fù)合查詢頁簽里進(jìn)行查詢埠胖,http://localhost:9200/_search糠溜,? ? ? post請求)
? ? match
? ? 最簡單的一個(gè)match例子:
? ? 查詢和"我的寶馬多少馬力"這個(gè)查詢語句匹配的文檔。
? ? {"query": {"match": {"content": {"query":"我的寶馬多少馬力"}? ? }? }}
? ? 上面的查詢匹配就會(huì)進(jìn)行分詞直撤,比如"寶馬多少馬力"會(huì)被分詞為"寶馬 多少 馬力", 所有有關(guān)"寶馬 多少 馬力", 那么所有包含這三個(gè)詞中的一個(gè)或? ? ? ?多個(gè)的文檔就會(huì)被搜索出來非竿。
? ? 并且根據(jù)lucene的評分機(jī)制(TF/IDF)來進(jìn)行評分。
? ? match_phrase
? ? 比如上面一個(gè)例子谋竖,一個(gè)文檔"我的保時(shí)捷馬力不錯(cuò)"也會(huì)被搜索出來红柱,那么想要精確匹配所有同時(shí)包含"寶馬 多少 馬力"的文檔怎么做?就要使? ? ? ? 用 match_phrase 了
? ? {"query": {"match_phrase": {"content": {"query":"我的寶馬多少馬力"}? ? }? }}
? ? 完全匹配可能比較嚴(yán)蓖乘,我們會(huì)希望有個(gè)可調(diào)節(jié)因子锤悄,少匹配一個(gè)也滿足,那就需要使用到slop嘉抒。
? ? {"query": {"match_phrase": {"content": {"query":"我的寶馬多少馬力","slop":1}? ? }? }}
? ? multi_match
? ? 如果我們希望兩個(gè)字段進(jìn)行匹配零聚,其中一個(gè)字段有這個(gè)文檔就滿足的話,使用multi_match
? ? {"query": {"multi_match": {"query":"我的寶馬多少馬力","fields": ["title","content"]? ? }? }}
? ? 但是multi_match就涉及到匹配評分的問題了。
? ? 我們希望完全匹配的文檔占的評分比較高隶症,則需要使用best_fields
? ? {"query": {"multi_match": {"query":"我的寶馬發(fā)動(dòng)機(jī)多少","type":"best_fields","fields": ["tag","content"],"tie_breaker":0.3}? }}
? ? 意思就是完全匹配"寶馬 發(fā)動(dòng)機(jī)"的文檔評分會(huì)比較靠前政模,如果只匹配寶馬的文檔評分乘以0.3的系數(shù)
? ? 我們希望越多字段匹配的文檔評分越高,就要使用most_fields
? ? {"query": {"multi_match": {"query":"我的寶馬發(fā)動(dòng)機(jī)多少","type":"most_fields","fields": ["tag","content"]? ? }? }}
? ? 我們會(huì)希望這個(gè)詞條的分詞詞匯是分配到不同字段中的蚂会,那么就使用cross_fields
? ? {"query": {"multi_match": {"query":"我的寶馬發(fā)動(dòng)機(jī)多少","type":"cross_fields","fields": ["tag","content"]? ? }? }}
? ? term
? ? term是代表完全匹配淋样,即不進(jìn)行分詞器分析,文檔中必須包含整個(gè)搜索的詞匯
? ? {"query": {"term": {"content":"汽車保養(yǎng)"}? }}
? ? 查出的所有文檔都包含"汽車保養(yǎng)"這個(gè)詞組的詞匯胁住。
? ? 使用term要確定的是這個(gè)字段是否“被分析”(analyzed)趁猴,默認(rèn)的字符串是被分析的。
? ? 拿官網(wǎng)上的例子舉例:
? ? mapping是這樣的:
? ? PUT my_index{"mappings": {"my_type": {"properties": {"full_text": {"type":"string"},"exact_value": {"type":"string","index":"not_analyzed"}? ? ? }? ? ? ? }? }}PUT my_index/my_type/1{"full_text":"Quick Foxes!","exact_value":"Quick Foxes!"}
? ? 其中的full_text是被分析過的彪见,所以full_text的索引中存的就是[quick, foxes]儡司,而extra_value中存的是[Quick Foxes!]。
? ? 那下面的幾個(gè)請求:
? ? GET my_index/my_type/_search{"query": {"term": {"exact_value":"Quick Foxes!"}? }}
? ? 請求的出數(shù)據(jù)企巢,因?yàn)橥耆ヅ?/p>
? ? GET my_index/my_type/_search{"query": {"term": {"full_text":"Quick Foxes!"}? }}
? ? 請求不出數(shù)據(jù)的枫慷,因?yàn)閒ull_text分詞后的結(jié)果中沒有[Quick Foxes!]這個(gè)分詞。
? ? bool聯(lián)合查詢: must,should,must_not
? ? 如果我們想要請求"content中帶寶馬浪规,但是tag中不帶寶馬"這樣類似的需求或听,就需要用到bool聯(lián)合查詢。
? ? 聯(lián)合查詢就會(huì)使用到must,should,must_not三種關(guān)鍵詞笋婿。
? ? 這三個(gè)可以這么理解
? ? must: 文檔必須完全匹配條件
? ? should: should下面會(huì)帶一個(gè)以上的條件誉裆,至少滿足一個(gè)條件,這個(gè)文檔就符合should
? ? must_not: 文檔必須不匹配條件
? ? 比如上面那個(gè)需求:
? ? {"query": {"bool": {"must": {"term": {"content":"寶馬"}? ? ? },"must_not": {"term": {"tags":"寶馬"}? ? ? }? ? }? }}
四缸濒、更新數(shù)據(jù)
? ??
? ? 成功后查詢一下數(shù)據(jù)
? ? 更新成功足丢,_version變?yōu)?,表示剛才更新過一次庇配,之前是1斩跌。同時(shí)_source下id沒有了,因?yàn)閯偛鸥聰?shù)據(jù)的json里不含id捞慌。
五耀鸦、刪除數(shù)據(jù)
? ? 查詢驗(yàn)證一下