日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es查询index生成时间_Elasticsearch第二谈(ES核心概念、ES简单操作、构建查询、查询结果过滤排序分页、term和match查询区别、自定义查询结果高亮)...

發布時間:2024/9/18 编程问答 35 豆豆

寫博客即是為了記錄自己的學習歷程,也希望能夠結交志同道合的朋友一起學習。文章在撰寫過程中難免有疏漏和錯誤,歡迎指出文章的不足之處;更多內容請點進👉愛敲代碼的小游子👈查看。

臨淵羨魚,不如退而結網。一起加油!

Elasticsearch相關概念

1、Elasticsearch面向文檔、關系行數據庫、和Elasticsearch對比

Elasticsearch的文件存儲,Elasticsearch是面向文檔型數據庫,一條數據在這里就是一個文檔,用JSON作為文檔序列化的格式

關系數據庫 ? 數據庫 ? 表 ? 行 ? 列(Columns)

Elasticsearch ? 索引(Index) ? 文檔(Docments) ? 字段(Fields) ?類型(相當于一個類,把同一類的索引保存)

2、文檔

Elasticsearch是面向文檔的,索引和搜索數據最小單位是文檔,Elasticsearch中文檔重要的屬性:

自我包含、一篇文檔同時包含字段和對應的值,key:value

可以是層次的,一個文檔中包含自文檔(就是一個json對象,fastjson進行自動轉換)

靈活的結構,文檔不依賴于預先定義的模式

3、類型

類型是文檔的邏輯容器,就像關系型數據庫,表格是行的容器。類型中對于字段的定義稱為映射,比如name映射為字符串類型。文檔是無模式的,它不需要有映射中定義的所有字段;

4、索引

可理解為數據庫

索引是映射類型的容器,Elasticsearch中的索引是一個非常大的文檔集合。索引存儲了映射類型中的字段和其他設置。然后他們被保存到了各個分片上

物理設計:節點和分片 如何工作?

一個集群至少有一個節點,而一個節點就是一個Elasticsearch進程,節點可以有多個索引默認的,如果你創建一個索引,那么索引將會有5個分片(主分片),每一個分片會有一個副本(賦值分片)

5、分片

到了一定數量級,索引文件就會占滿整個服務器的磁盤,磁盤容量只是其中一個問題,索引文件變的大,會嚴重降低搜索的效率。怎么解決這個問題呢?

分片就是用來解決這些問題的,簡單來講,分片就是把單索引文件分成多份存儲,且這些索引的分片可以分部在不同的機器上。假設單臺機器磁盤容量1TB,現在需要存放5TB的索引數據,那就可以把5TB索引分成10份,分別存放到10臺機器上每份500G,這就是所謂的倒排索引

Elasticsearch 使用一種稱為 倒排索引 的結構,它適用于快速的全文搜索。一個倒排索引由文檔中所有不重復詞的列表構成,對于其中每個詞,有一個包含它的文檔列表。

例如,假設我們有兩個文檔,每個文檔的 content 域包含如下內容:

The quick brown fox jumped over the lazy dog

Quick brown foxes leap over lazy dogs in summer

為了創建倒排索引,首先要將每個文檔拆分成獨立的詞,然后創建一個包所有不重復的詞條排序列表,然后列出每個詞條出現在哪個文檔:

現在查詢to forever,只需要查看包含每個詞條的文檔

IK分詞器

1、什么是ik分詞器:

分詞:即把一段中文或者別的劃分成一個個的關鍵字,我們在搜索時候會把自己的信息進行分詞,會把數據庫中或者索引庫中的數據進行分詞,然后進行一個匹配操作

默認的中文分詞是將每個字看成一個詞,比如"中國的花"會被分為"中",“國”,“的”,“花”,這顯然是不符合要求的,所以我們需要安裝中文分詞器ik來解決這個問題。

IK提供了兩個分詞算法ik_smart 和 ik_max_word,其中 ik_smart 為最少切分,ik_max_word為最細粒度劃分

2、安裝

地址:https://github.com/medcl/elasticsearch-analysis-ik

解壓到Elasticsearch安裝目錄中的plugins中即可

3、重啟觀察es

4、使用elasticsearch-plugin查看插件

5、使用Kibana測試

GET _analyze

{

"analyzer": "ik_max_word",

"text": ["愛敲代碼的小游子"]

}

6、ik分詞器增加自己的配置

問題:自定義的詞,“小游子”被拆開了

需要自己加入分詞器的字典中

新建分詞詞典(注意dic文件存儲要使用UTF-8才能生效),引入

重啟es

執行查詢操作

Rest風格

一、操作索引

1、創建一個索引

PUT /索引名/~文檔類型~/文檔id

{

請求體

}

2、數據類型

3、指定字段的類型

PUT /test2

{

"mappings": {

"properties": {

"name": {

"type": "text"

},

"age": {

"type": "long"

},

"birthday": {

"type": "date"

}

}

}

}

4、獲得規則信息

GET 索引名

5、查看默認的信息

6、擴展命令

查看es信息

GET _cat/…

查看索引信息

GET _cat/indices?v

7、修改索引

可以使用PUT提交,覆蓋之前的設置

改掉需要修改的參數值即可(不管是否修改,所有的參數值都必須有,如果沒有,修改后就為空)

PUT /yky/user/0001

{

"name":"愛敲代碼的小游子",

"age":20,

"tag":["愛敲代碼","Java大佬","offer收割機"]

}

post方式修改

只需要寫出需要修改的參數值即可

POST /庫名/類型/文檔id/_update

{

"doc": {

參數

}

}

8、刪除索引

二、文檔的基本操作

1、添加數據

PUT /索引名/類型/id

{

參數體

}

2、獲取數據

GET 索引名/類型/id

3、更新數據

PUT

POST _update

#新增

PUT /yky/user/003

{

"name": "李四",

"age": 22,

"desc": "很強",

"tags": ["初中生","c大佬","暖男"]

}

#查詢

GET /yky/user/001

#更新數據

POST /yky/user/001/_update

{

"doc":{

"name": "愛敲代碼的小游子"

}

}

4、條件查詢

GET 索引名/類型/_search?q=key:value

三、花式查詢

1、使用Query DSL

其輸出和上面使用/_search?q=john的輸出一樣。上面的multi_match關鍵字通常在查詢多個fields的時候作為match關鍵字的簡寫方式。fields屬性指定需要查詢的字段,如果我們想查詢所有的字段,這時候可以使用_all關鍵字,正如上面的一樣。以上兩種方式都允許我們指定查詢哪些字段

GET /yky/user/_search

{

"query":{

"match": {

"FIELD": "TEXT"

}

}

}

2、構建的查詢

3、結果的過濾

GET yky/user/_search

{

"query": {

"match": {

"name": "小游子"

}

},

"_source": ["name","age"]

}

4、排序

GET yky/user/_search

{

"query": {

"match": {

"name": "小游子"

}

},

"sort": [

{

"age": {

"order": "desc"

}

}

]

}

4、分頁查詢

"from": 從第幾條詩句開始顯示(從0開始),

"size": 每頁顯示數據條數,

"sort": 排序,

數據下標從0開始

可以進行多條件查詢

must == > and ==> 所有條件都要符合

GET yky/user/_search

{

"query": {

"bool": {

"must": [

{

"match": {

"name": "小游子"

}

},

{

"match": {

"age": 20

}

}

]

}

}

}

should ==> or

GET /yky/user/_search

{

"query": {

"bool": {

"should": [

{

"match": {

"name": "小游子"

}

},

{

"match": {

"name": "yky"

}

}

]

}

}

}

must_not ==> not

查詢不滿足所有條件的數據

6、過濾器

lt小于

gt大于

gte大于等于

lte小于等于

"filter": [{

"range": {

"age": {

"gt": 0,

"lte": 100

}

}

}]

7、匹配多個條件

多個條件只要滿足一個就能查詢

GET /yky/user/_search

{

"query":{

"match": {

"參數名": "條件一 條件二"

}

}

}

8、精確查詢

term查詢直接通過倒排索引指定的詞條查詢的

分詞:term直接查詢精確的

match:會使用分詞器解析,先分析文檔

兩個類型:text keyword ==》 text類型可以被分詞器解析,keyword類型不會被分詞器解析

term和match查詢區別

1、match查詢

match的查詢匹配就會進行分詞,比如"愛敲代碼的的小游子"會被分詞為"愛 敲 代碼 的 小 游子", 所有有關"愛 敲 代碼 的 小 游子", 那么所有包含這三個詞中的一個或多個的文檔就會被搜索出來。

并且根據lucene的評分機制(TF/IDF)來進行評分。

2、term查詢

term是代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯

9、多個值精確查詢

10、高亮查詢

GET yky/user/_search

{

"query": {

"match": {

"name": "小游子"

}

},

"highlight": {

"fields": {

"name": {}

}

}

}

11、自定義搜索高亮查詢

GET yky/user/_search

{

"query": {

"match": {

"name": "小游子"

}

},

"highlight": {

"pre_tags": "

",

"post_tags": "

",

"fields": {

"name": {}

}

}

}

總結

以上是生活随笔為你收集整理的es查询index生成时间_Elasticsearch第二谈(ES核心概念、ES简单操作、构建查询、查询结果过滤排序分页、term和match查询区别、自定义查询结果高亮)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。