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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Elasticsearch之search搜索入门

發(fā)布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch之search搜索入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 搜索語法入門

1.1query string search

無條件搜索所有

GET /book/_search {"took" : 969,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "book","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "Bootstrap開發(fā)","description" : "Bootstrap是由Twitter推出的一個前臺頁面開發(fā)css框架,是一個非常流行的開發(fā)框架,此框架集成了多種頁面效果。此開發(fā)框架包含了大量的CSS、JS程序代碼,可以幫助開發(fā)者(尤其是不擅長css頁面開發(fā)的程序人員)輕松的實現(xiàn)一個css,不受瀏覽器限制的精美界面css效果。","studymodel" : "201002","price" : 38.6,"timestamp" : "2019-08-25 19:11:35","pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags" : ["bootstrap","dev"]}},{"_index" : "book","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"name" : "java編程思想","description" : "java語言是世界第一編程語言,在軟件開發(fā)領(lǐng)域使用人數(shù)最多。","studymodel" : "201001","price" : 68.6,"timestamp" : "2019-08-25 19:11:35","pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags" : ["java","dev"]}},{"_index" : "book","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"name" : "spring開發(fā)基礎(chǔ)","description" : "spring 在java領(lǐng)域非常流行,java程序員都在用。","studymodel" : "201001","price" : 88.6,"timestamp" : "2019-08-24 19:11:35","pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags" : ["spring","java"]}}]} }

解釋

took:耗費了幾毫秒

timed_out:是否超時,這里是沒有

_shards:到幾個分片搜索,成功幾個,跳過幾個,失敗幾個。

hits.total:查詢結(jié)果的數(shù)量,3個document

hits.max_score:score的含義,就是document對于一個search的相關(guān)度的匹配分數(shù),越相關(guān),就越匹配,分數(shù)也高

hits.hits:包含了匹配搜索的document的所有詳細數(shù)據(jù)

1.2傳參

與http請求傳參類似

GET /book/_search?q=name:java&sort=price:desc

類比sql: select * from book where name like ’ %java%’ order by price desc

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : null,"hits" : [{"_index" : "book","_type" : "_doc","_id" : "2","_score" : null,"_source" : {"name" : "java編程思想","description" : "java語言是世界第一編程語言,在軟件開發(fā)領(lǐng)域使用人數(shù)最多。","studymodel" : "201001","price" : 68.6,"timestamp" : "2019-08-25 19:11:35","pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags" : ["java","dev"]},"sort" : [68.6]}]} }

1.3圖解timeout

GET /book/_search?timeout=10ms

全局設(shè)置:配置文件中設(shè)置 search.default_search_timeout:100ms。默認不超時。

2.multi-index 多索引搜索

2.1multi-index搜索模式

告訴你如何一次性搜索多個index和多個type下的數(shù)據(jù)

/_search:所有索引下的所有數(shù)據(jù)都搜索出來 /index1/_search:指定一個index,搜索其下所有的數(shù)據(jù) /index1,index2/_search:同時搜索兩個index下的數(shù)據(jù) /index*/_search:按照通配符去匹配多個索引

應用場景:生產(chǎn)環(huán)境log索引可以按照日期分開。

log_to_es_20190910

log_to_es_20190911

log_to_es_20180910

2.2初步圖解一下簡單的搜索原理

搜索原理初步圖解

?

3. 分頁搜索

3.1分頁搜索的語法

sql: select * from book limit 1,5

和 SQL 使用 LIMIT 關(guān)鍵字返回單個 page 結(jié)果的方法相同,Elasticsearch 接受 from 和 size 參數(shù):

  • size

    顯示應該返回的結(jié)果數(shù)量,默認是 10

  • from

    顯示應該跳過的初始結(jié)果數(shù)量,默認是 0

顯示應該返回的結(jié)果數(shù)量,默認是 10

顯示應該跳過的初始結(jié)果數(shù)量,默認是 0

如果每頁展示 5 條結(jié)果,可以用下面方式請求得到 1 到 3 頁的結(jié)果:

GET /book/_search?size=5 ? GET /book/_search?size=5&from=5 ? GET /book/_search?size=5&from=10

3.2deep paging

什么是deep paging

根據(jù)相關(guān)度評分倒排序,所以分頁過深,協(xié)調(diào)節(jié)點會將大量數(shù)據(jù)聚合分析。

?

deep paging 性能問題

1消耗網(wǎng)絡(luò)帶寬,因為所搜過深的話,各 shard 要把數(shù)據(jù)傳遞給 coordinate node,這個過程是有大量數(shù)據(jù)傳遞的,消耗網(wǎng)絡(luò)。

2消耗內(nèi)存,各 shard 要把數(shù)據(jù)傳送給 coordinate node,這個傳遞回來的數(shù)據(jù),是被 coordinate node 保存在內(nèi)存中的,這樣會大量消耗內(nèi)存。

3消耗cup,coordinate node 要把傳回來的數(shù)據(jù)進行排序,這個排序過程很消耗cpu。 所以:鑒于deep paging的性能問題,所有應盡量減少使用。

4. query string基礎(chǔ)語法

4.1query string基礎(chǔ)語法

GET /book/_search?q=name:javaGET /book/_search?q=+name:javaGET /book/_search?q=-name:java +和-的含義:+ 表示必須包含- 表示 不包含

4.2、_all metadata的原理和作用

GET /book/_search?q=java

直接可以搜索所有的field,任意一個field包含指定的關(guān)鍵字就可以搜索出來。我們在進行中搜索的時候,難道是對document中的每一個field都進行一次搜索嗎?不是的。

es中all元數(shù)據(jù)。建立索引的時候,插入一條document,es會將所有的field值經(jīng)行全量分詞,把這些分詞,放到all field中。在搜索的時候,沒有指定field,就在_all搜索。

舉例

{name:jackemail:123@qq.comaddress:beijing }

_all : jack,123@qq.com,beijing

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch之search搜索入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。