elasticsearch 學習之基礎CURD

来源:https://www.cnblogs.com/jalja/archive/2018/01/24/8337169.html
-Advertisement-
Play Games

環境:elasticsearch6.1.2 kibana6.1.2 基礎概念: 1、_index元數據 (1)代表一個document存放在哪個index中(2)類似的數據放在一個索引,非類似的數據放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品銷 ...


環境:elasticsearch6.1.2        kibana6.1.2 

 

基礎概念:

1、_index元數據

(1)代表一個document存放在哪個index中
(2)類似的數據放在一個索引,非類似的數據放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品銷售數據),inventory index(包含了所有庫存相關的數據)。如果你把比如product,sales,human resource(employee),全都放在一個大的index裡面,比如說company index,不合適的。
(3)index中包含了很多類似的document:類似是什麼意思,其實指的就是說,這些document的fields很大一部分是相同的,你說你放了3個document,每個document的fields都完全不一樣,這就不是類似了,就不太適合放到一個index裡面去了。
(4)索引名稱必須是小寫的,不能用下劃線開頭,不能包含逗號。

2、_type元數據

(1)代表document屬於index中的哪個類別(type)
(2)一個索引通常會劃分為多個type,邏輯上對index中有些許不同的幾類數據進行分類:因為一批相同的數據,可能有很多相同的fields,但是還是可能會有一些輕微的不同,可能會有少數fields是不一樣的,舉個例子,就比如說,商品,可能劃分為電子商品,生鮮商品,日化商品,等等。
(3)type名稱可以是大寫或者小寫,但是同時不能用下劃線開頭,不能包含逗號

3、_id元數據

(1)代表document的唯一標識,與index和type一起,可以唯一標識和定位一個document
(2)我們可以手動指定document的id(put /index/type/id),也可以不指定,由es自動為我們創建一個id

 

一、插入

  數據準備(插入):es會自動建立index和type,不需要提前創建,而且es預設會對document每個field都建立倒排索引,讓其可以被搜索。

PUT /ecommerce/product/1
{
    "name" : "gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}
PUT /ecommerce/product/2
{
    "name" : "jiajieshi yagao",
    "desc" :  "youxiao fangzhu",
    "price" :  25,
    "producer" :      "jiajieshi producer",
    "tags": [ "fangzhu" ]
}

PUT /ecommerce/product/3
{
    "name" : "zhonghua yagao",
    "desc" :  "caoben zhiwu",
    "price" :  40,
    "producer" :      "zhonghua producer",
    "tags": [ "qingxin" ]
}

插入數據時的id生成策略

  手動指定document id當es的數據來源於其他系統,比如mysql而這些數據都有主鍵ID,建議使用該方式,可以直接將mysql的主鍵作為es中的ID。

  自動生成的id當我們的數據是直接存儲到es中時,建議採用該方式。該方式的特點,長度為20個字元,URL安全,base64編碼,GUID,分散式系統並行生成時不可能會發生衝突

POST /test_index/test_type
{
  "test_content": "my test"
}
結果: {
"_index": "test_index", "_type": "test_type", "_id": "fkSoJ2EBuYE9HLKhxglD", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }

 

二、修改

1、document的全量替換型修改:該方式是直接替換類型是 product  id=1的文檔。該方式必須帶上所有的field,才能去進行信息的修改。

PUT /ecommerce/product/1
{
    "name" : "jiaqiangban gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}

註意:

1、document的全量替換

(1)語法與創建文檔是一樣的,如果document id不存在,那麼就是創建;如果document id已經存在,那麼就是全量替換操作,替換document的json串內容
(2)document是不可變的,如果要修改document的內容,第一種方式就是全量替換,直接對document重新建立索引,替換裡面所有的內容
(3)es會將老的document標記為deleted,然後新增我們給定的一個document,當我們創建越來越多的document的時候,es會在適當的時機在後臺啟動線程刪除標記為deleted的document,釋放空間。

2、指定修改內容修改(推薦該方式)

POST /ecommerce/product/1/_update
{
  "doc": {
    "name": "jiaqiangban gaolujie yagao"
  }
}

三、刪除 

  根據類型的Id直接刪除

DELETE /ecommerce/product/1

  註意 不是物理刪除,只會將其標記為deleted,當數據越來越多的時候,在後臺啟動線程自動刪除,釋放空間

四、查詢

(一)、query string search

    什麼是query string search:search參數都是以http請求的query string來附帶的

demo:

1、搜索全部商品:

GET /ecommerce/product/_search
{
  
}

結果分析:

took:耗費了幾毫秒
timed_out:是否超時,這裡是沒有
_shards:數據拆成了5個分片,所以對於搜索請求,會打到所有的primary shard(或者是它的某個replica shard也可以)
hits.total:查詢結果的數量,3個document
hits.max_score:score的含義,就是document對於一個search的相關度的匹配分數,越相關,就越匹配,分數也高
hits.hits:包含了匹配搜索的document的詳細數據

 

2、搜索商品名稱中包含yagao的商品,並按照價格倒序:

GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
{
  
}

(二)、query DSL

DSL:Domain Specified Language,特定領域的語言
http request body:請求體,可以用json的格式來構建查詢語法,比較方便,可以構建各種複雜的語法。

1、分頁查詢所有商品並按照價格倒序

GET /ecommerce/product/_search
{
  "query": { "match_all": {} },
  "sort": [
        { "price": "desc" }
    ],
  "from": 0,
  "size": 3
}

query:包裝查詢條件

sort:包裝排序條件

form:第幾頁

size:每頁幾條

2、根據名稱查詢,並按照價格倒序

GET /ecommerce/product/_search
{
  "query": { "match": {
              "name":"yagao"
          } 
  },
  "sort": [
        { "price": "desc" }
    ]
}

3、指定返回結果的列(field)

GET /ecommerce/product/_search
{
  "query": { "match_all": {} },
  "_source": ["name", "price"]
}

_source元數據:就是說,我們在創建一個document的時候,使用的那個放在request body中的json串,預設情況下,在get的時候,會原封不動的給我們返回回來。我們可以指定_source中,返回哪些field。

(三)、query filter

1、搜索商品名稱包含yagao,而且售價大於25元的商品

GET /ecommerce/product/_search
{
    "query" : {
        "bool" : {
            "must" : {
                "match" : {
                    "name" : "yagao" 
                }
            },
            "filter" : {
                "range" : {
                    "price" : { "gt" : 25 } 
                }
            }
        }
    }
}

 

(四)full-text search (全文檢索)

全文檢索會將輸入的搜索串拆解開來,去倒排索引裡面去一一匹配,只要能匹配上任意一個拆解後的單詞,就可以作為結果返回。

1、根據一段文字進行查找

GET /ecommerce/product/_search
{
    "query" : {
        "match" : {
            "producer" : "yagao producer"
        }
    }
}

producer這個欄位,會先被拆解,建立倒排索引。根據es中這個欄位的所有數據分詞後有 jiajieshi、gaolujie、zhonghua、producer

查詢條件producer 也會被分詞  ,分詞為 yagao 和 producer

結果分析: "max_score": 0.2876821 匹配度

(五)、phrase search (短語查找)

輸入的搜索串,必須在指定的欄位文本中,完全包含一模一樣的,才可以算匹配,作為結果返回。

GET /ecommerce/product/_search
{
    "query" : {
        "match_phrase" : {
            "producer" : "yagao producer"
        }
    }
}

結果為空

 

(六)、highlight search (高亮搜索結果)

GET /ecommerce/product/_search
{
    "query" : {
        "match" : {
            "producer" : "producer"
        }
    },
    "highlight": {
        "fields" : {
            "producer" : {}
        }
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.事物簡介 ACID:Atomicity(要麼全都做,要麼全不做)、Consistency(一致性)Isolation(最關鍵,事物之間獨立,互相不影響) Durability(持久)隔離級別:Read Uncommitted(可以讀別的事物未提交commit的數據) Read Committed ...
  • 前言 昨天筆者介紹了Mysql的解壓縮版本的安裝,今天筆者就來介紹一下msi版本的安裝。 一、下載地址 https://dev.mysql.com/downloads/ 但是可能你會發現,在官網下載的速度像龜速一樣,這時候有一個小技巧可以用哦,那就是將下載的鏈接複製一下,到迅雷上面去下載,原本七個小 ...
  • 項目因為歷史原因使用了 GBK編碼,遇到非GBK編碼字元時出現亂碼問題,情況比較嚴重,暫時先打算修改 列的字元編碼為 utf8mb4. 查看 mysql 手冊: 用 GBK 編碼轉 utf8 進行說明: 他的大概意思是,如果 是 char varchar text 等類型的,並且這些列的內容也是採用 ...
  • 日常應用運維工作中,Dev或者db本身都需要統計表的行數,以此作為應用或者維護的一個信息參考。也許很多人會忽略select count(*) from table_name類似的sql對資料庫性能的影響,可當你在慢日誌平臺看到執行了數千次,每次執行4秒左右的查詢,你還會無動於衷嗎?作為一個有擔當敢於 ...
  • FROM `task_detatils` WHERE FIND_IN_SET( '1', responsible_user) 將含有1的responsible_user列數據全部搜索出來 ...
  • 一、 概述 MySQL從3.23.15版本以後提供資料庫複製(replication)功能,利用該功能可以實現兩個資料庫同步、主從模式、互相備份模式的功能。本文檔主要闡述瞭如何在linux系統中利用mysql的replication進行雙機熱備的配置。 二、 環境 操作系統:ubuntu 14.04 ...
  • pt-align的功能很簡單,將其它工具的輸出按列對其。 用法: pt-align [FILES] 如果沒有指定文件,則預設讀取標準輸入的內容。 如,常用的vmstat的輸出,閱讀體驗就不夠人性化。 在這種情況下,就可以使用pt-align進行處理 ...
  • 背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性組中的次要副本的唯一方法是使用備份、複製和還原。 在一個高可用組裡面添加一個資料庫需要很多手動任務和一些必要條件。需要完成的這些工作中,有一些是有些困難的,比如: 我們需要從主副本中備 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...