Elasticsearch学习笔记

es增删改查

创建index

PUT /index_name   				//index的名字
{
  "mappings": {
    "my_type": {				//type_name
      "dynamic" : "strict",    //规定如果添加新的field会报错
      "properties": {
        "title" : {
          "type": "text", 		
          "index": true
        },
        "address" : {
          "type": "object",		//object类型
          "dynamic" : true     //规定如果添加新的field会进行dynamic mapping
        }
      }
    }
  }
}
1.定制dynamic策略
true:遇到陌生字段,就进行dynamic mapping
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错

手动创建mapping

    PUT /index_name
    {
      "settings":{
        "number_of_shards":3,          //分片的数量
        "number_of_replicas":1         //副本数量
      },
      "mappings":{
        "type_name":{                  //类型的名字
          "dynamic" : "strict",        //(注释1) 规定如果添加新的field会报错(true,flase,strict)
          "properties":{  
            "name":{              
              "type":"text",           //类型为text(keyword ,text)  text分词
              "analyzer":"standard"    //(注释2)使用分词器 
            },
            "updata_time":{
              "type":"date",          //日期类型
              "index":"false"         //是否创建倒排索引  默认情况下会为每个字段建立倒排
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"   //时间的格式
            }
          }
        }
      }
    }

1 定制dynamic策略
true:遇到陌生字段,就进行dynamic mapping
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错
########################################
2 ik 分词器
ik_max_word //细粒度的拆分,尽可能多的拆分出词语
ik_smart //粗力度但拆分,不会重复

添加数据

//如果给定ID 可以使用put 
//如果没有给定ID 只能使用post系统自动生成一个ID
PUT /index_name/type_name/id
{
 "name":"xioaming"
}

查询

直接在url中添加查询条件
(简单查询)

 GET GET /index_name/type_nameme/_search?q=xiaohei:hello Elasticsearch

 结果

 {
        "took": 1,                //时间毫秒
        "timed_out": false,       //是否超时
        "_shards": {               //分片
          "total": 3,             //向三个分片发送请求
          "successful": 3,        //三个成功
          "skipped": 0,  
          "failed": 0
        },
        "hits": {
          "total": 2,             //一共查询出来几个文档
          "max_score": 0.5753642, // 匹配度分数  匹配度最大的 
          "hits": [
            {
              "_index": "yyz001",
              "_type": "yyztype",
              "_id": "9t7Al2sBgnM7_3hnd7qZ",
              "_score": 0.5753642,
              "_source": {        //每个字段对应的值
                "xiaohei": "hello Elasticsearch",
                "time": "2019-6-25"
              }
            },
            {
              "_index": "yyz001",
              "_type": "yyztype",
              "_id": "9d64l2sBgnM7_3hnzbou",
              "_score": 0.2876821,
              "_source": {
                "dabai": "hello Elasticsearch"
              }
            }
          ]
        }
 }

term查询

term 会去倒排索引中去找 , 不会分词 ,倒排索引中没有就是没有, 适合没有分词类型的进行查询

GET /index_name/type_name/_search
{
  "query":{
    "term":{
      "name":"hello Elasticsearch"
    }
  }
}

terms查询

terms  查询多个
  GET /index_name/type_name/_search
  {
    "from":0, //将查询结果从第0个文档开始
    "size":2, //显示到第2个, 只显示两个
    "version":true,//显示版本号 如果更改过数据
    "query":{
      "terms":{
        "xiaohei":["hello Elasticsearch","hello zhongguo"]//查询多个
      }
    }
  }

match查询

match  会进行分词, 
  GET /index_name/type_name/_search
  {
    "query":{
      "match":{
        "xiaohei":"hello Elasticsearch" //先分词然后再去查找(分为hello和Elasticsearch)
      }
    }
  }

multi_match查询

multi_match   可以指定多个字段  
  GET /index_name/type_name/_search
  {
    "query":{
      "multi_match":{
        "query":"hello"
        "fields":["name","age"]      //只要是在name和age中有hello的都会被查到
      },
    "_source":{
      "includes":["name","age"],              //显示哪些字段
      "excludes":["address","birthday"]       //不显示哪些字段
    }
    }
  }

match_phrase

match_phrase   短语匹配  
  GET /index_name/type_name/_search
  {
    "_source":["name","ag*"],   //控制只显示哪些字段 ,可以使用通配符
    "query":{
      "match_phrase":{
      "xiaohei":"hello Elasticsearch"  // 必须完全一样才能查出来 ,必须完全一样才能查出来
      }
    },
  
  }

sort 排序

sort 排序
  GET /index_name/type_name/_search
  {
    "query":{
      "match_all":{}
    },
    "sort":[
    {
      "age":{
        "order":desc     //ace&desc 和sql是一样的
      }
    }
    ]
  }

match_phrase_prefix 查询

GET /index_name/type_name/_search
      {
        "query":{
          "match_phrase_prefix":{
          "xiaohei":"hello"  //  相当于sql 的 like 'hello%' 
          }
        },
      
      }

范围查询

范围查询 range
      GET /index_name/type_name/_search
      {
        "query":{
          "range":{               // 范围查询
          "birthday":{
            "from":"1900-10-10",
            "to":"2019-6-1",
            "include_lower":true, //包含上限(from)
            "include_upper":false //不包含下限(false)
          } 
          }
        },
      }

fuzzy模糊查询

    GET /index_name/type_name/_search
      {
        "query":{
          "fuzzy":{
            "name":"xomig" //可以查到xiaoming
          }
        }
      }

高亮显示

GET /index_name/type_name/_search
    {
      "query":{
        "match":{
          "name":"xiaoming"
        }
      }
      "highlight":{                //高亮显示
        "fields":{
          "name":{} 			//字段名字
        }
      }
    }

Bool查询

Bool查询现在包括四种子句,must,filter,should,must_not。
bool查询的使用
Bool查询对应 Lucene 中的BooleanQuery,它由一个或者多个子句组成,每个子句都有特定的类型。


must

返回的文档必须满足must子句的条件,并且参与计算分值
与 AND 等价。


filter

返回的文档必须满足filter子句的条件。但是不会像Must一样,参与计算分值


should
返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,
有一个或者多个should子句,至少有一个语句要匹配,与 OR 等价。
minimum_should_match 参数定义了至少满足几个子句。


must_not

所有的语句都 不能匹配,与 NOT 等价。


{
    "bool" : {
        "must" : {      //返回的文档必须满足must子句的条件,参与计算分值
            "term" : { "user" : "kimchy" }
        },
        "filter": {     //返回的文档必须满足filter子句的条件。但是不会参与计算分值
            "term" : { "tag" : "tech" }
        },
        "must_not" : {    //返回的文档必须不满足must_not定义的条件。
            "range" : {
                "age" : { "from" : 10, "to" : 20 }
            }
        },
        "should" : [     
                 // 返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,
                    有一个或者多个should子句,那么只要满足一个就可以返回。
                    minimum_should_match 参数定义了至少满足几个子句。
            {
                "term" : { "tag" : "wow" }
            },
            {
                "term" : { "tag" : "elasticsearch" }
            }
        ],
        //有一个或者多个should子句,那么只要满足一个就可以返回。
 		//minimum_should_match 参数定义了至少满足几个子句。
        "minimum_should_match" : 1,
        "boost" : 1.0
    }
}

function_score

function_score 查询详情可以查看官网
https://www.elastic.co/guide/cn/elasticsearch/guide/current/function-score-query.html


exists 查询和 missing 查询被用于查找那些指定字段中有值 (exists) 或无值 (missing) 的文档。
这与SQL中的 IS_NULL (missing) 和 NOT IS_NULL (exists) 在本质上具有共性

{
    "exists":   {
        "field":    "title"
    }
}

尽管没有 bool 查询使用这么频繁,constant_score 查询也是你工具箱里有用的查询工具。
它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询
(例如,评分查询)的情况下。

可以使用它来取代只有 filter 语句的 bool 查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助。

{
    "constant_score":   {
        "filter": {
            "term": { "category": "ebooks" } 
        }
    }
}

term 查询被放置在 constant_score 中,转成不评分的 filter。
这种方式可以用来取代只有 filter 语句的 bool 查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值