map语法获取index_复习Elasticsearch的基础语法(一)
之前實(shí)踐過(guò)的Elasticsearch到現(xiàn)在基本上的語(yǔ)法我都回憶不起來(lái)了,所以準(zhǔn)備寫篇文章幫助自己復(fù)習(xí)一下,沒(méi)有什么技術(shù)含量的分享,但是也分享給想初步了解的朋友們。
就不介紹Elasticsearch了,直接進(jìn)入正文(手動(dòng)分割線0.0)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
為了模擬真實(shí)場(chǎng)景,建議大家在linux下安裝Elasticsearch。
Kibana是一個(gè)Elasticsearch索引庫(kù)數(shù)據(jù)統(tǒng)計(jì)工具,可以利用Elasticsearch的聚合功能,生成各種圖表,而且還提供了操作Elasticsearch索引數(shù)據(jù)的控制臺(tái),并且提供了一定的API提示,非常有利于我們學(xué)習(xí)Elasticsearch的語(yǔ)法(劃重點(diǎn)!!!提供API提示!),建議安裝。
啟動(dòng)后Kibana后
選擇左側(cè)的DevTools菜單,即可進(jìn)入控制臺(tái)頁(yè)面
1.基本概念
Elasticsearch也是基于Lucene的全文檢索庫(kù),本質(zhì)也是存儲(chǔ)數(shù)據(jù),很多概念與MySQL類似的。
對(duì)比關(guān)系:
索引(indices)--------------------------------Databases 數(shù)據(jù)庫(kù)
類型(type)-----------------------------Table 數(shù)據(jù)表 ? ? 文檔(Document)----------------Row 行 ? 字段(Field)-------------------Columns 列2.創(chuàng)建索引
Elasticsearch采用Rest風(fēng)格API,因此其API就是一次http請(qǐng)求,你可以用任何工具發(fā)起http請(qǐng)求
創(chuàng)建索引的請(qǐng)求格式:
請(qǐng)求方式:PUT
請(qǐng)求路徑:/索引庫(kù)名
請(qǐng)求參數(shù):json格式:
{ ? ?"settings": { ? ? ? ?"number_of_shards": 3, ? ? ? ?"number_of_replicas": 2 ? ? }}number_of_shards:分片數(shù)量
number_of_replicas:副本數(shù)量
settings:索引庫(kù)的設(shè)置
查看和刪除分別使用get和delete請(qǐng)求即可。
2.1 映射配置
通俗的講就是mysql數(shù)據(jù)庫(kù)中的建表
創(chuàng)建映射請(qǐng)求方式依然是PUT
PUT /索引庫(kù)名/_mapping/類型名稱{ "properties": { ? "字段名": { ? ? "type": "類型", ? ? "index": true, ? ? "store": true, ? ? "analyzer": "分詞器" ? } }}類型名稱:就是前面type的概念,類似于數(shù)據(jù)庫(kù)中的不同表字段名:任意填寫 ,可以指定許多屬性,例如:
type:類型,可以是text、long、short、date、integer、object等
index:是否索引,默認(rèn)為true
store:是否存儲(chǔ),默認(rèn)為false
analyzer:分詞器
Elasticsearch中支持的數(shù)據(jù)類型非常豐富
他的String類型,又分兩種,這個(gè)很有特色!:
text:可分詞,不可參與聚合
keyword:不可分詞,數(shù)據(jù)會(huì)作為完整字段進(jìn)行匹配,可以參與聚合
2.1.2index
index影響字段的索引情況。
true:字段會(huì)被索引,則可以用來(lái)進(jìn)行搜索。默認(rèn)值就是true
false:字段不會(huì)被索引,不能用來(lái)搜索
index的默認(rèn)值就是true,但是有些字段是我們不希望被索引的,比如商品的圖片信息,就設(shè)置index為false。
2.1.3 store
是否將數(shù)據(jù)進(jìn)行額外存儲(chǔ)。
Elasticsearch在創(chuàng)建文檔索引時(shí),會(huì)將文檔中的原始數(shù)據(jù)備份,保存到一個(gè)叫做_source的屬性中。而且我們可以通過(guò)過(guò)濾_source來(lái)選擇哪些要顯示,哪些不顯示。
而如果設(shè)置store為true,就會(huì)在_source以外額外存儲(chǔ)一份數(shù)據(jù),多余,因此一般我們都會(huì)將store設(shè)置為false。默認(rèn)就為false
2.2 新增數(shù)據(jù)
通過(guò)POST請(qǐng)求,可以向一個(gè)已經(jīng)存在的索引庫(kù)中添加數(shù)據(jù)
示例:
POST /test/goods/
{
? ? "title":"籃球",
? ? "images":"123",
? ? "price":99
}
通過(guò)kibana查看數(shù)據(jù):
get _search
{
? ? "query":{
? ? ? ? "match_all":{}
? ? }
}
-----------------------------------------------------------------------------
響應(yīng):
{
? "_index": "test",
? "_type": "goods",
? "_id": "r9c1KGMBIhaxtY5rlRKv",
? "_version": 1,
? "_score": 1,
? "_source": {
? ? "title": "籃球",
? ? "images": "123",
? ? "price": 99
? }
}
_source:源文檔信息,所有的數(shù)據(jù)都在里面。
_id:這條文檔的唯一標(biāo)示,與文檔自己的id字段沒(méi)有關(guān)聯(lián)
3. 查詢
我們從4塊來(lái)講查詢:
基本查詢
_source過(guò)濾
結(jié)果過(guò)濾
高級(jí)查詢
排序
3.1基本查詢
基本語(yǔ)法
GET /索引庫(kù)名/_search{ ? ?"query":{ ? ? ? ?"查詢類型":{ ? ? ? ? ? ?"查詢條件":"查詢條件值" ? ? ? } ? }}這里的query代表一個(gè)查詢對(duì)象,里面可以有不同的查詢屬性
查詢類型:
例如:match_all,?match,term?,?range 等等
查詢條件:查詢條件會(huì)根據(jù)類型的不同,寫法也有差異
示例:
GET /test/_search
{
? ? "query":{
? ? ? ? "match_all": {}
? ? }
}
query:代表查詢對(duì)象
match_all:代表查詢所有
------------------------------------------------------------------------------
結(jié)果:
{
? "took": 2,
? "timed_out": false,
? "_shards": {
? ? "total": 3,
? ? "successful": 3,
? ? "skipped": 0,
? ? "failed": 0
? },
? "hits": {
? ? "total": 2,
? ? "max_score": 1,
? ? "hits": [
? ? ? {
? ? ? ? "_index": "jiang",
? ? ? ? "_type": "goods",
? ? ? ? "_id": "2",
? ? ? ? "_score": 1,
? ? ? ? "_source": {
? ? ? ? ? "title": "籃球",
? ? ? ? ? "images": "123",
? ? ? ? ? "price": 99
? ? ? ? }
? ? ? },
? ? ? {
? ? ? ? "_index": "jiang",
? ? ? ? "_type": "goods",
? ? ? ? "_id": "r9c1KGMBIhaxtY5rlRKv",
? ? ? ? "_score": 1,
? ? ? ? "_source": {
? ? ? ? ? "title": "足球",
? ? ? ? ? "images": "123",
? ? ? ? ? "price": 69
? ? ? ? }
? ? ? }
? ? ]
? }
}
took:查詢花費(fèi)時(shí)間,單位是毫秒
time_out:是否超時(shí)
_shards:分片信息
hits:搜索結(jié)果總覽對(duì)象
_index:索引庫(kù)
_type:文檔類型
_id:文檔id
_score:文檔得分
_source:文檔的源數(shù)據(jù)
total:搜索到的總條數(shù)
max_score:所有結(jié)果中文檔得分的最高分
hits:搜索結(jié)果的文檔對(duì)象數(shù)組,每個(gè)元素是一條搜索到的文檔信息
3.2匹配查詢
or關(guān)系
match類型查詢,會(huì)把查詢條件進(jìn)行分詞,然后進(jìn)行查詢,多個(gè)詞條之間是or的關(guān)系
GET /test/_search
{
? ? "query":{
? ? ? ? "match":{
? ? ? ? ? ? "title":"小米電視"
? ? ? ? }
? ? }
}
結(jié)果不僅會(huì)查詢到電視,而且與小米相關(guān)的都會(huì)查詢到,多個(gè)詞之間是or的關(guān)系。
-------------------------------------------------------------------------------------------------------
and關(guān)系
某些情況下,我們需要更精確查找,我們希望這個(gè)關(guān)系變成and,可以這樣做
GET /test/_search
{
? ? "query":{
? ? ? ? "match": {
? ? ? ? ? "title": {
? ? ? ? ? ? "query": "小米電視",
? ? ? ? ? ? "operator": "and"
? ? ? ? ? }
? ? ? ? }
? ? }
}
這樣,只有同時(shí)包含小米和電視的詞條才會(huì)被搜索到。
3.3多字段查詢
multi_match與match類似,不同的是它可以在多個(gè)字段中查詢結(jié)果我們會(huì)在title字
GET /test/_search
{
? ? "query":{
? ? ? ? "multi_match": {
? ? ? ? ? ? "query":? ? "小米",
? ? ? ? ? ? "fields":? ?[ "title", "subTitle" ]
? ? ? ? }
}
}
段和subtitle字段中查詢小米這個(gè)詞
3.4詞條匹配(term)
term 查詢被用于精確值 匹配,這些精確值可能是數(shù)字、時(shí)間、布爾或者那些未分詞的字符串
GET /test/_search
{
? ? "query":{
? ? ? ? "term":{
? ? ? ? ? ? "price":2699.00
? ? ? ? }
? ? }
}
3.5結(jié)果過(guò)濾
默認(rèn)情況下,elasticsearch在搜索的結(jié)果中,會(huì)把文檔中保存在_source的所有字段都返回。
如果我們只想獲取其中的部分字段,我們可以添加_source的過(guò)濾
GET /test/_search
{
? "_source": ["title","price"],
? "query": {
? ? "term": {
? ? ? "price": 2699
? ? }
? }
}
------------------------------------------------------------------------------------------------------------
突然發(fā)現(xiàn)有點(diǎn)晚了,還是下次再繼續(xù)介紹高級(jí)查詢和聚合的使用好了。。。。。。。。。。。
敬請(qǐng)期待~~~~~~~~~~~
總結(jié)
以上是生活随笔為你收集整理的map语法获取index_复习Elasticsearch的基础语法(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 列赋值为列表_Pandas入门-3-新增
- 下一篇: java 纳秒 毫秒_golang的ti