elasticsearch概念(集合了數據保存和數據分析的一個搜索引擎)
1.集羣:一個或者多個節點組織在一起
2.節點:一個節點是集羣中的一個服務器,默認是隨機的一個漫畫角色
3.分片:將索引劃分爲多分的能力,允許水平分割和拓展容量,多個分片相應請求,提高性能和吞吐量
4.副本:就是備份X份,可分配在多個服務器
elasticsearch與數據庫的對應關係:
index-數據庫
type-表
documents-行
fields-列
在kibana中進行所有elasticsearch的操作
在kibana中創建索引(數據庫):
建立索引,注意不是“ ”而是“”;不是空格而是下劃線,原生的關鍵字都前面帶“”
number_of_shards:分片不可以修改
number_of_replicas:備份可以修改
PUT lagou
{
"settings": {
"index": {
"number_of_shards":5,
"number_of_replicas":1
}
}
}
獲取信息
#GET獲取信息
GET lagou/_settings
GET _all/_settings
保存文檔,插入數據,ID唯一
#PUT保存文檔
PUT lagou/job/1
{
"title":"python研發",
"salary_min":1000000,
"city":"深圳",
"company":{
"name":"baidu百度",
"addr":"南山"
},
"publish_date":"2017-4-16",
"compents":15
}
#post插入數據,不指明id的話,用post
PUT lagou/job/2
{
"title":"python研發",
"salary_min":2000000,
"city":"深圳",
"company":{
"name":"baidu百度",
"addr":"南山"
},
"publish_date":"2017-4-16",
"compents":15
}
修改數據
#方法一,把全部數據列出來覆蓋修改
PUT lagou/job/AV6PBQZEIcVdkiaxlbUt
{
"title":"python研發",
"salary_min":2000000,
"city":"北京",
"company":{
"name":"baidu百度",
"addr":"南山"
},
"publish_date":"2017-4-16",
"compents":15
}
#方法二 ,只局部更新數據,注意“doc”
POST lagou/job/1/_update
{
"doc":{
"company":{
"addr":"USA"
}
}
}
刪除數據
#刪除
DELETE index/type/id
批量操作,ES批量操作 使用_mget,_bulk
GET _mget
{
"docs":[
{
"_index":"lagou",
"_type":"job",
"_id":1
},
{
"_index":"lagou",
"_type":"job",
"_id":2
},
{
"_index":"lagou",
"_type":"jobs",
"_id":1
}
]
}
#在GET中加入index可以省略在數據中指明index,type同理
GET lagou/_mget
{
"docs":[
{
"_type":"job",
"_id":1
},
{
"_type":"job",
"_id":2
},
{
"_type":"jobs",
"_id":1
}
]
}
#bulk支持同時多個操作,支持index,delete,create,update,注意要不可回車換行
#寫法:action_and_meta_data\n
option_source\n
POST _bulk
#
{"creat":{"_index":"test","_type":"type1","_id":1}}
{"field":"value"}
#
{"delete":{"_index":"test","_type":"type1","_id":1}}
#
{"index":{"_index":"test","_type":"type1","_id":1}}
{"field":"value"}
#
{"update":{"_index":"test","_type":"type1","_id":1}}
{"doc":{"field":"value"}}
#不要換行
POST _bulk
{"index":{"_index":"lagou","_type":"job","_id":1}}
{"title":"python研發","salary_min":1000000,"city":"深圳","company":{"name":"baidu百度","company_addr":"南山"},"publish_date":"2017-4-16","comment":15}
{"index":{"_index":"lagou","_type":"job","_id":2}}
{"title":"C++研發","salary_min":2000000,"city":"北京","company":{"name":"阿里巴巴","company_addr":"豐臺"},"publish_date":"2017-4-17","comment":16}
{"index":{"_index":"lagou","_type":"job","_id":3}}
{"title":"Java研發","salary_min":3000000,"city":"廣州","company":{"name":"騰訊","company_addr":"花都"},"publish_date":"2017-4-18","comment":17}
{"index":{"_index":"lagou","_type":"job","_id":4}}
{"title":"PHP研發","salary_min":4000000,"city":"上海","company":{"name":"小米","company_addr":"陸家嘴"},"publish_date":"2017-4-19","comment":18}
查看analyze分析結果
GET _analyze
{
"analyzer": "ik_max_word"(選擇分析器),
"text": "需要分析的內容"
}
建立映射(mappings),預先定義字段類型及其屬性,已經創建了mappings之後不可以修改mappings信息類型,但可以新增信息類型
有時候range,term等不好用,很可能就是mappings沒做好
內置類型
string類型:text,keyword
數字類型:long,integer,short,byte,double,float
日期類型:date
布爾類型:boolean
binary(二進制)類型:binary
複雜類型:object,nested
geo類型:geo-point,geo-shape
專業類型:ip,competion
內置屬性(主要屬性)
store: yes標識字段會存儲
index: yes標識會分析
null_value:如果字段爲空,可是設置默認值
analyzer:設置分析器,中文分詞器用ik
include_in_all:默認es爲每個字段定義的域_all, false則不可搜索
format:時間格式字符串的模式
創建mappings:
#creat mappings
PUT lagou
{
"mappings":{
"job":{
"properties":{
"title":{
"type":"text",
"analyzer":"ik_max_word"
},
"salary_min":{
"type":"integer"
},
"city":{
"type":"keyword"
},
"company":{
"properties":{
"name":{
"type":"text",
"analyzer":"ik_max_word"
},
"company_addr":{
"type":"text"
}
}
},
"publish_date":{
"type":"date",
"format":"yyyy-mm-dd"
},
"comment":{
"type":"integer"
}
}
}
}
}
獲取mappings信息:
GET _all/_mappings
GET index/_mappings
elasticsearch屬性信息
搜索參考文檔
elasticsearch簡單搜索
1.基本查詢:使用ES內置查詢條件進行查詢,參與打分
2.組合查詢:多個查詢組合在一起進行復合查詢
3.過濾:通過filter條件在不影響打分的情況下篩選數據
1.match查詢:傳入字符串利用analyzer進行分詞
GET index/_search
{
"query": {
"match": {
"FIELD": "TEXT"
}
}
}
2.term查詢:傳遞進來的查詢值不做處理(不好用)
GET index/_search
{
"query": {
"term": {
"FIELD": "TEXT"
}
}
}
3.terms查詢:FIELD列表內的關鍵字都會被查詢到
GET lagou/_search
{
"query": {
"terms": {
"FIELD": []
}
}
}
4.“from”,”size”進行分頁控制,from控制從第幾個搜索結果開始展示,size表示暫時數據的長度
GET index/_search
{
"query": {
"match": {
"FIELD": "TEXT"
}
},
"from":1
"size":10
}
,
5.match_all:返回所有數據信息
GET lagou/_search
{
"query": {
"match_all": {}
}
}
elasticsearch短語查詢
1.match_phrase
GET lagou/_search
{
“query”: {
“match_phrase”: {
“FIELD”: {
“query”: “TEXT”,
“slop”:integer,數字表示分詞後的詞間距
}
}
}
}
2.multi_match
GET lagou/_search
{
"query": {
"multi_match": {
"query":"TEXT",
"fields":["FIELD1","FIELD2"]
}
}
}
}
elasticsearch搜索結果排序
sort排序,order指定排序方式,asc升序,desc降序
GET index/_search
{
"query": {
"match_all": {},
},
"sort": [
{
"FIELD": {
"order": "desc"
}
}
]
}
elasticsearch range查詢
gte:大於等於; gt:大於; lte:小於等於; lt:小於; boots:表示權重
GET lagou/_search
{
"query": {
"range": {
"FIELD": {
"gt": integer,
"lt": integer
}
}
},
"sort": [{
"FIELD": {
"order": "desc"
}
}
]
}
elasticsearch 模糊查詢
wildcard是模糊查詢功能,value中的“*”標識通配符
GET lagou/_search
{
"query": {
"wildcard": {
"FIELD": {
"value": "TEXT",
"boost": integer
}
}
}
}
elasticsearch bool查詢
filter:字段過濾並且不參與打分,過濾掉非數組內的內容
must:滿足數組中所有的條件,“與”
should:數組中的查詢條件滿足一個或多個,“或”
must_not:數組中的查詢條件一個都不能去滿足,“非”
“bool”:{
“filter”:[],
“must”:[],
“should”:[],
“must_not”:[]
}
默認獲取所有數據
GET test_data/position/_search
{
"query": {
"bool": {
"must": [{
"match_all":{}
}],
"filter": {
"terms": {
"FIELD": "query"
}
},
"must_not": [{
"match": {
"FIELD": "query"
}
}],
"should": [{
"match": {
"FIELD": "query"
}
}]
}
}
}
嵌套查詢
查找空值
GET test_data/position/_search
{
"query": {
"bool": {
"filter": {
"exists": {
"field": "FIELD"(列表名)
}
}
}
}
}