elasticsearch 第一講

啓動es的方式 sh bin/elasticsearchgit

es插件

查看插件 sh bin/elasticsearch-plugin -h 查看幫忙文檔
sh bin/elasticsearch-plugingithub

  • list 查看插件列表
  • install 安裝插件
  • remove 移除插件

查看插件 http://localhost:9200/_cat/pluginsjson

多實例方式運行es
安裝logstash

下載 https://www.elastic.co/cn/downloads/logstash
下載 導入數據 https://grouplens.org/datasets/movielens/api

es 使用方式

es index => table document => 行數據
get /movies/_count 獲取總數量
get /movies/ 獲取 mapping和 setting信息數組

es 增刪改查
es新增 當前id爲自動生成
POST users/_doc
{
  "user":"Mike",
  "post_date":"2019-04-15T14:12:12",
  "message": "tring out kibana"
}
es新增若是存在則不建立
PUT users/_doc/1?op_type=create
{
  "user" : "Jack",
  "post_date" : "2019-04-15T14:12:12",
  "message" : "trying out Elasticsearch"
}
es新增 當前id爲指定, 若是存在則覆蓋 version + 1
PUT users/_doc/1
{
  "user":"Mike"
}
es 修改 指定當前id,若是當前字段存在則修改,若是不存在則追加
POST users/_update/1
{
    "doc":{
        "user":"test",
        "post_date":"2019-04-15T14:12:12",
        "message":"trying out Elasticsearch"
    }
}
獲取對象的信息
GET users/_doc/1
刪除數據
DELETE users/_doc/1
刪除索引
DELETE users
查看分詞信息
standard 分詞器

按照 空格 轉換成小寫 中文 非 _ 分割
包含數字 英文app

simple 分詞器

按照 空格 不包含數字 轉換大小寫爲小寫curl

whitespace 分詞器

按照 空格分割 不轉換大小寫 - 符號也不進行分割elasticsearch

stop 分詞器

按照 空格 - 分割 不包含數字和 副詞(in the)post

keyword 分詞器

不進行分詞學習

中文分詞

standard 分詞的時候 分解成 單獨的詞語
icu_analyzer 中文分詞
ik 中文分詞 安裝方式 鏈接地址
ik_max_word 最細粒度 分詞
ik_smart 粗粒度 分詞

POST _analyze
{
    "analyzer":"standard",
    "text":"2 running Quick brown-foxes leap over lazy dogs in the summer evening"
}
search api的使用
URI search 在url中使用參數查詢
/kibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie

q 表示查詢的意思 使用的是 Query String syntax
df 表示指定默認查詢字段 默認是 全部字段
sort 排序字段
profile 能夠查看 查詢是如何執行的
() 的做用是表示或者,例如 q=title:(a b) 表示title爲a 或者 b,若是爲 q=title:a b 則表示 title 爲a 其餘的字段只要包含 b就算搜索的數據

表示全部字段中包含 2012的數據
/movies/_search?q=2012
{
    "profile":true
}

表示title中包含2012的數據
/movies/_search?q=2012&df=title 
{
    "profile":true
}

/movies/_search?q=title:2012
{
    "profile":true
}

//表示 title 字段包含 beautiful 的或者 其餘的字段中存在 mind的數據
/movies/_search?q=title:beautiful mind
{
    "profile":true
}

//表示 title 字段包含 beautiful mind的數據。當前爲嚴格查詢 必須的包含 beautiful mind 的數據; PhraseQuery
/movies/_search?q=title:"beautiful mind"
{
    "profile":true
}

//表示的是 title中包含 beautiful或者 title中包含 mind的數據
/movies/_search?q=title:(beautiful mind)
{
    "profile":true
}

//表示 獲取包含mind的數據,當前 包含beautiful的數據排名靠前,可是具體還須要再肯定
/movies/_search?q=title:(beautiful %2Bmind)
{
    "profile": true
}

//表示字段 titile中既要包含 beautiful 又要包含 mind 不分先後,這個是和 "beautiful mind" 的區別
/movies/_search?q=title:(beautiful AND mind)
{
    "profile": true
}

//表示字段 title中包含 beautiful可是不包含mind的數據
/movies/_search?q=title:(beautiful NOT mind)
{
    "profile":true
}

//範圍查找 區間查找 TODO 

//通配符查詢和模糊匹配 TOTO
request body search 基於 json格式的更加完備的 查詢方式

此處爲重點學習內容,不少東西都只能在request body中使用

curl -X GET "http://xx/kibana_sample_data_ecommerce/_search" -H 'Content-Type:application/json' -d '{"query":{"match_all":{}}}'

prifle 表示的是 展現查詢 如何執行
分頁 from size from 表示從第幾個開始,size表示返回多少條數據
排序 sort
顯示字段

// _source 表示顯示的字段只能爲數組的方式
// sort 表示排序,還能夠寫成 "sort":{"year":"desc"} 或 "sort":[{"year":{"order":"desc"}}]  
// _source 表示的顯示字段

GET /movies/_search
{
    "profile":true,
    "from": 0,
    "size": 10,
    "sort": [
        {"year":"desc"}
    ],
    "_source":["year", "title"]
}

//表示的是 title中包含 beautiful或者 title中包含 mind的數據 至關於 /movies/_search?q=title:(beautiful mind)
GET /movies/_search
{
    "profile": "true",
    "from": 0,
    "size": 5,
    "query": {
        "match":{
            "title": "beautiful mind"
        }
    }
}


//表示字段 titile中既要包含 beautiful 又要包含 mind 不分先後 至關於 /movies/_search?q=title:(beautiful AND mind)

GET /movies/_search
{
    "profile": "true",
    "from": 0,
    "size": 5,
    "query": {
        "match":{
            "title":{
                "query": "beautiful mind",
                "operator": "AND"
            }
        }
    }
}

//表示字段 title中 必須的包含 beautiful mind 按照順序的方式返回,至關於 /movies/_search?q=title:"beautiful mind"
GET /movies/_search
{
    "profile":"true",
    "from": 0,
    "size": 10,
    "query": {
        "match_phrase":{
            "title":{
                "query": "beautiful mind"
            }
        }
    }
}

// 表示 beautiful 和 mind 中間能夠冗餘 3個單詞
GET /movies/_search
{
    "profile":"true",
    "from": 0,
    "size": 10,
    "query": {
        "match_phrase":{
            "title":{
                "query": "beautiful mind",
                "slop": 3
            }
        }
    }
}
指定索引查詢
/_search  全部索引上查詢
/index1/_search 在索引 index1 上查詢
/index1,index2/_search 在索引 index1 index2 上查詢
/index*/_search 以index開頭的索引上查詢
queryString
//查詢 字段爲 title 中包含 beautiful 或者 mind的數據
/movies/_search
{
    "profile": true,
    "query":{
        "query_string":{
            "query":"beautiful mind",
            "default_field": "title"
        }
    }
}

//查詢title中必須存在beautiful和mind的數據,在query中使用的 AND 表示的是 而且的意思
/movies/_search
{
    "profile": true,
    "query":{
        "query_string":{
            "query":"beautiful AND mind",
            "default_field": "title"
        }
    }
}

//同上
/movies/_search
{
    "profile": true,
    "query":{
        "query_string":{
            "query":"beautiful mind",
            "default_field": "title",
            "default_operator": "and"
        }
    }
}

//使用 simple_query_string 執行查詢操做
/movies/_search
{
    "profile": "true",
    "query":{
        "simple_query_string":{
            "query": "beaultiful mind",
            "default_operator": "and",
            "fields": ["title"]
        }
    }
}

//同上,simple_string_query 使用的是 + - | 表示 and not or, 只有 fields
/movies/_search
{
    "profile": "true",
    "query":{
        "simple_query_string":{
            "query": "beaultiful + mind",
            "fields": ["title"]
        }
    }
}

simple_string_query 和 string_query 對比
一、string_query 可使用 default_filed和fields 可是 simple_string_query 只可用 fields
二、string_query 在 query 字段中能夠 使用 AND OR NOT 表示 「而且、 或者、不」 得關係,可是必須的爲大寫,simple_string_query 必須 使用 "+ | -" 表示 而且 或者 不 的關係;二者均可以使用 default_operator 達到一樣的效果

_mapping的定義 以及 使用

dynamic _mapping 默認動態設置 數據類型;
dynamic _mapping 設置的值分別爲 true false strict 默認爲true
true 表示 新增字段會自動索引;false表示 新增字段不會索引,strict表示 不能新增數據;
查看mapping信息 GET /index/_mapping

PUT /index/_mapping
{
    "dynamic": true
}
聚合 aggs

分組統計

GET /kibana_sample_data_flights/_search
{
    //顯示詳細的表示查詢字段過程
    "profile": true ,
    //只是顯示0條結果,這裏主要看統計信息,因此不看數據
    "size": 0,
    //統計信息
    "aggs":{
        //表示統計結果呈現字段
        "flight_dest":{
            //分組統計,相似group by
            "terms":{
                //分組字段
                "field": "OriginCountry",
                //統計結果只是顯示一條數據
                "size": 10
            }
        },
        //獲取總數據的平均值
        "avg_price":{
            "avg":{
                "field":"AvgTicketPrice"
            }
        },
        //獲取總數據的最大值和最小值
        "max_price":{
            "max":{
                "field": "AvgTicketPrice"
            }
        },
        "min_price":{
            "min":{
                "field":"AvgTicketPrice"
            }
        }
        
        //分組中添加二次分組
        "weather":{
            //按照天氣字段分組
            "terms":{
                "field": "DestWeather"
            },
            //在天氣分組中,再按照OriginCountry進行分組
            "aggs":{
                "origin_source":{
                    "terms":{
                        "field": "OriginCountry"
                    }
                }
            }
        }
    }
}
相關文章
相關標籤/搜索