es查询index生成时间_Elasticsearch第二谈(ES核心概念、ES简单操作、构建查询、查询结果过滤排序分页、term和match查询区别、自定义查询结果高亮)...
寫博客即是為了記錄自己的學習歷程,也希望能夠結交志同道合的朋友一起學習。文章在撰寫過程中難免有疏漏和錯誤,歡迎指出文章的不足之處;更多內容請點進👉愛敲代碼的小游子👈查看。
臨淵羨魚,不如退而結網。一起加油!
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查询区别、自定义查询结果高亮)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去哪里治疗女性不孕不育
- 下一篇: 家用投影仪价格一般多少啊?