Elasticsearch 基本查询

注:本实例代码是在ES marvel插件中执行

# 初始化索引
GET http://127.0.0.1:9200/library/ 
{
  "settings" :{
    "index": {
      "number_of_shards": 5,
      "number_of_replicas": 1
    }
  }
}

# 通过GET 带上参数_settings可以获得该索引详细的配置信息
GET /library/_settings

GET /library,lebron/_settings

GET  /_all/_settings


# 创建一个指定ID的索引
PUT /library/books/2
{
  "title": "ES Search learn 07.",
  "name": {
    "first" : "Zachary",
    "last": "Tong"
  },
  "publish_date": "2018-11-11",
  "price":"35.99"
}

# 创建一个不指定ID的索引
POST /library/books/
{
  "title": "ES Search learn 006.",
  "name": {
    "first" : "Zachary",
    "last": "Tong"
  },
  "publish_date": "2018-11-11",
  "price":"35.99"
}

# 查询数据
GET /library/books/1
GET /library/books/2
GET /library/books/AWcCiCek-RVw3Ht8UZoN

# 查询指定列数据
GET /library/books/1?_source=title
GET /library/books/1?_source=title,price
GET /library/books/1?_source


# 更新(直接覆盖的方式)
PUT /library/books/3
{
  "title": "ES Search learn 07.",
  "name": {
    "first" : "Zachary",
    "last": "Tong"
  },
  "publish_date": "2018-11-11",
  "price":"55.99"
}


# 通过_update api 的方式单独更新想要更新的字段
POST /library/books/2/_update
{
  "doc": {
    "price": 10
  }
}

GET /library/books/2

# 删除一个文档
DELETE /library/books/1

GET /library/books/1

# 删除type
GET /library/books

# 删除索引
GET /library



# 通过_mget获取多个文档
GET /_mget
{
  "docs": [
      {
        "_index": "library",
        "_type": "books",
        "_id": 1
      },
      {
        "_index": "library",
        "_type": "books",
        "_id": 2,
        "_source": ["title", "price"]
      }
    ]
}

GET /library/books/_mget
{
  "ids": ["1", "2"]
}


# 多重模式
# 批量操作bulk
POST /library/books/_bulk
{ "index": {"_id": 5}}
{ "title": "java", "price": "5"}
{ "index": {"_id": 6}}
{ "title": "elasticsearch", "price": "5"}
{ "index": {"_id": 7}}
{ "title": "python", "price": "5"}
{ "index": {"_id": 8}}
{ "title": "perl", "price": "5"}
{ "index": {"_id": 9}}
{ "title": "ruby", "price": ""}

GET /library/

GET /library/books/_mget
{
  "ids" : ["1", "2", "3", "5", "6", "7", "8", "9"]
}



POST /library/books/_bulk
{"delete" : { "_index": "library", "_type": "books", "_id": "3"}}
{"create": { "_index": "music", "_type": "classical", "_id": "1"}}
{"title": "Ave Verum Corpus"}
{"index": { "_index": "music", "_type": "classical"}}
{"title": "Litaniac de Venerabili Altaris Sacromento"}
{"update": { "_index": "library", "_type": "books", "_id": "2"}}
{"doc": { "price": "18"}}


GET /library/books/3

GET /library/books/_mget
{
  "ids" : [ "1", "2", "3", "4", "5"]
}

GET /music/classical/_mget
{
  "ids": ["1", "AWcFsZwe-RVw3Ht8UoEu"]
}


# version 版本控制
# 内部版本控制
# 版本号自增,查询指定版本号必须为当前版本号(为操作校验)
PUT /library/books/1
{
  "title": "Elasticsearch: The Definitive Guide",
  "name": {
    "first" : "Zachary",
    "last" : "Tong"
  },
  "publish_date" : "2018-11-12"
}

GET /library/books/1

POST /library/books/1/_update
{
  "doc": {
    "price": 12
  }
}

POST /library/books/1/_update?version=4
{
  "doc": {
    "price": 12
  }
}


# 外部版本控制
# 指定版本号必须大于当前版本号(为指定新的操作版本号)
PUT /library/books/1?version=5&version_type=external
{
  "title": "Elasticsearch: The Definitive Guide",
  "name" : {
    "first": "Zachary",
    "last" : "Tong"
  },
  "publish_date": "2018-11-12",
  "price": "20"
}

GET /library/books/1




# 建立映射
POST /library2
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "books": {
      "properties": {
      "title": {"type": "string"},
      "name": {"type": "string", "index": "not_analyzed"},
      "publish_date": {"type": "date", "index": "not_analyzed"},
      "price": {"type": "double"},
      "number": {"type": "integer"}
     }
    }
  }
}

GET /library2


# 动态映射
# 首先需要在根对象中添加"dynamic": "strict", 然后在字段对象中添加"dynamic": true, 且字段对象中的类型为object
PUT /library2
{
  "mappings": {
    "books": {
      "dynamic": "strict",
      "properties": {
      "title": {"type": "string"},
      "name": {"type": "string", "index": "not_analyzed"},
      "publish_date": {"type": "date", "index": "not_analyzed"},
      "price": {"type": "double"},
      "number": {
        "type": "object",
        "dynamic": true
      }
     }
    }
  }
}



# 管理映射
# 获取某个索引的映射信息
GET /library/_mapping

GET /library2/_mapping

# 获取某个索引下某个type的映射信息
GET /library/_mapping/books

# 获取这个集群内所有的映射信息
GET /_all/_mapping

# 获取这个集群内某两个或多个type的映射信息
GET /_all/_mapping/books,coms




# 更新修改Mapping映射
# 很遗憾,mapping一旦建立,就不能修改现有的字段映射
# 如果要推倒现有的映射,你得重新建立一个索引,然后重新定义映  射
# 然后把之前索引里的数据导入到新建立的索引里
# ----------具体的方法----------
# 1. 给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2
# 2. 运行 : PUT /现有索引/_alias/别名A
# 3. 新创建一个索引,定义好最新的映射
# 4. 将别名指向新的索引,并且取消之前索引的指向,运行步骤5
# 5. 运行:POST /_aliases
#    {
#      "actions": [
#          { "remove": {"index": "现有索引名", "alias": "别名A"}},
#          { "add": {"index": "新建索引名", "alias": "别名A"}},
#        ]
#    }
#
# 注:通过这几个步骤就实现了索引的平滑过度,并且是零停机的




# 删除映射
DELETE /library/books

DELETE /library/books/_mapping

DELETE /library/_mapping/books,coms









# 基本查询
# 查看测试数据
GET /library/books/_mget
{
  "ids": ["1", "2", "3"]
}

# 查看library的mapping信息
GET /library/_mapping


# --------------------------
# 简单查询

# 指定index名以及type名的搜索
GET /library/books/_search?q=title:elasticsearch

# 指定index名没有type名的搜索
GET /library/_search?q=title:mongodb

# 既没有index名也没有type名的搜索
GET /_search?q=title:elasticsearch


# --------------------------
# term查询

# term查询:查询某个字段里有某个关键词的文档
GET /library/books/_search
{
  "query": {
    "term": {
      "preview": "elasticsearch"
    }
  }
}

# terms查询:查询某个字段里有多个关键词的文档
# minimum_match :最小匹配集;1 说明两个关键词里最少有一个,  2 就说明文档里这两个关键词都得存在
GET /library/books/_search
{
  "query": {
    "terms": {
      "preview": [
        "elasticsearch",
        "book"
      ]
    },
    "minimum_match": 1
    
  }
}


# 控制查询返回的数量
# from 和 size
# 相当于mysql里的limit
# from : 从哪个结果开始返回, 下标从0开始
# size : 定义返回最大的结果数
GET /library/books/_search?q=title:elasticsearch

GET /library/books/_search
{
  "from": 1,
  "size": 2,
  "query": {
    "term": {
      "title": "elasticsearch"
    }
  }
}



# 返回版本号_version

GET /library3/books/_search
{
  "version": true,
  "query": {
    "term": {
      "title": "elasticsearch"
    }
  }
}


# ---------------------
# match查询

# match查询可接受文字,数字日期等数据类型
# match跟term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过  程

GET /library3/books/_search
{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}


# 通过match_all查询
# 查询指定索引下的所有文档
GET /library/books/_search
{
  "query": {
    "match_all": {}
  }
}


# 通过match_phrase查询
# 短语查询,slop定义的是关键词之间隔多少未知单次
GET /library/books/_search
{
  "query": {
    "match_phrase": {
      "preview": "elasticsearch , distributed",
      "slop": 2
    }
  }
}


# multi_match查询
# 可以指定多个字段
# 比如查询title和preview这两个字段里面包含了Elasticsearch关键词的文档
GET /library/books/_search
{
  "query": {
    "multi_match": {
      "query": "Elasticsearch",
      "fields": ["title", "preview"]
    }
  }
}

POST /library/books/
{
  "title": "Project code",
  "preview": "use Elasticsearch."
}



# --------------------
# 指定返回的字段
# 注意只能返回store为yes的字段
GET /library/books/_search
{
  "fields": ["preview"],
  "query": {
    "match": {
      "preview": "elasticsearch"
    }
  }
}


# 通过partial_fields控制加载的字段
GET /library/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["preview"],
      "exclude": ["title,price"]
    }
  },
  "query": {
    "match_all": {}
  }
}

# 还能加通配符
GET /library/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["pr*"],
      "exclude": ["tit*"]
    }
  },
  "query": {
    "match_all": {}
  }
}



# ------------------
# 排序
# desc 降序
# asc 升序
# 注意,如果数值型加上双引号,就是字符型。排序的时候不会按照  真正的数值大小进行排序,而是作为字符进行排序。
GET /library/books/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}



# ------------------
# prefix 前缀匹配查询
GET /library/books/_search
{
  "query": {
    "prefix": {
      "title": "r"
    }
  }
}



# ------------------
# 控制范围

# range 查询 :范围查询
# 有from, to , include_lower , include_upper, boost这些参数
# include_lower :是否包含范围的左边界,默认是true
# include_upper :是否包含范围的有边界,默认是true

GET /library/books/_search
{
  "query": {
    "range": {
      "publish_date": {
        "gte": "2018-11-12",
        "lte": "2018-11-12"
      }
    }
  }
}

GET /library/books/_search
{
  "query": {
    "range": {
      "publish_date": {
        "from": "2018-11-11",
        "to": "2018-11-12",
        "include_lower": true,
        "include_upper": false
      }
    }
  }
}


# ---------------------
# 

# wildcard查询 :允许你使用通配符 * 和 ? 来进行查询
# * 就代表一个或多个字符
# ? 仅代表一个字符
# 注意 :这个查询很影响性能
GET /library/books/_search
{
  "query": {
    "wildcard": {
      "title": "p*"
    }
  }
}

GET /library/books/_search
{
  "query": {
    "wildcard": {
      "preview": "p?ople"
    }
  }
}



# ---------------------
# 

# fuzzy模糊查询
# value : 查询的关键字
# boost : 设置查询的权值,默认是1.0
# min_similarity : 设置匹配的最小相似度,默认值为0.5;对于字  符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型,取值为1d,2d,1m这样,1多久代表一天。
# prefix_length : 指明区分词项的共同前缀长度,默认是0
# max_expansions : 指明查询中的词项可扩展的数目,默认可以无限大

# 故意输错rudy,应为ruby
GET /library/books/_search
{
  "query": {
    "fuzzy": {
      "title": "rudy"
    }
  }
}

# 故意输错rudy,应为ruby
GET /library/books/_search
{
  "query": {
    "fuzzy": {
      "title": {
        "value": "rudy",
        "min_similarity": 0.5
      }
    }
  }
}


# fuzzy_like_this 查询
# 查询得到与给定内容相似的所有文档
# fields :字段组,默认是_all
# like_text :设置关键词
# ignore_tf :设置忽略词项的频次,默认是false
# max_query_terms :指明在生成的查询中查询词项的最大数目。默认是25
# min_similarity :指明区分词项最小的相似度,默认是0.5
# prefix_length :指明分词项共同前缀的长度,默认是0
# boost :设置权值,默认是1.0
# analyze :指明用于分析给定内容的分析器

GET /library/books/_search
{
  "query": {
    "fuzzy_like_this": {
      "fields": ["title"],
      "like_text": "rudy",
      "min_similarity": 0.5,
      "prefix_length" : 0.2
    }
  }
}




# fuzzy_like_this_field 查询
# 只作用在一个字段里
# 其他与fuzzy_like_this功能一样
GET /library/books/_search
{
  "query": {
    "fuzzy_like_this_field": {
      "title": {
        "like_text": "rudy",
        "min_similarity": 0.5,
        "prefix_length" : 0.2
      }
    }
  }
}




# -------------------------
# more_like_this查询

# fields :定义字段组,默认是_all
# like_text :定义要查询的关键词
# percent_terms_to_match :该参数指明一个文档必须匹配多大比例的词项才被视为相似。默认值是0.3,意思是30%的比例
# min_term_freq :该参数指明在生成的查询中查询词项的最大数目。默认为25
# stop_words :该参数指明将被忽略的单词集合
# min_doc_freq :该参数指明词项应至少在多少个文档中出现才不会被忽略。默认是5
# max_doc_freq :该参数指明出现词项的最大数目,以避免词项被忽略。默认是无限大
# min_word_len :该参数指明单个单词的最小长度,低于该值的单词将被忽略,默认是0
# max_word_len :该参数指明单个单词的最大长度,高于该值得单词将被忽略,默认是无限大
# boost_terms :该参数指明提升每个单词的权重时使用的权值。默认是1
# boost :指明提升一个查询的权值,默认是1.0
# analyer :指定用户分析的分析器

GET /library/books/_search
{
  "query": {
    "more_like_this": {
      "fields": [
        "title"
      ],
      "like_text": "ruby",
      "min_term_freq": 1,
      "min_doc_freq": 1
    }
  }
}


# more_like_this_field 查询
# 只作用在一个字段里
# 其他与more_like_this功能一样
GET /library/books/_search
{
  "query": {
    "more_like_this_field": {
      "title": {
        "like_text": "search Lean",
        "min_term_freq": 1,
        "min_doc_freq": 1
      }
    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值