本文主要内容
curl命令行查询数据
连接es数据库:
curl -u admin:admin https://master:9200/
查询所有索引:
curl -u admin:admin 'https://master:9200/_cat/indices?v'
查询单个索引内容,如查询cqic_surf_chn_mul_yer索引库:
curl -u admin:admin https://master:9200/cqic_surf_chn_mul_yer/_search?pretty
根据条件查询:
curl -u admin:admin https://master:9200/bigdata/_search?q=name:hadoop&pretty
注意:高版本的es增加了安全机制,要求严格内容类型查询,所以在查询时需要加上请求头:-H "Content-Type: application/json"
查询的返回结果
DSL查询语言
一般来说,过滤语句比查询语句的执行效率高,因为它不用计算文档的相关性评分。频繁使用的过滤语句的结果集会被 ES自动缓存,以提高性能。过滤的目的就是粗暴地快速缩小匹配的结果集。通常全文搜索或需要用到相关性评分的场景采用查询(query),其他的全部用过滤(filter)。在进行搜索时,常会结合查询和过滤来达到我们的查询目的。
3、全文查询
| 说明 | |
|---|---|
| match | 关键字匹配查询,模糊查询,默认是逻辑或,可通过operator参数更改 |
| term | 关键字匹配查询,精确查询 |
| terms | 关键字匹配查询,多条件查询 match_all 无条件查询所有 |
| range | 范围查询,gt大于;lt小于;gte大于或等于;lte小于或等于 |
| bool | 复合查询,组合叶子查询或复合查询语句,如must, should, must_not |
must和should在上下文查询中执行;must_not在上下文过滤中执行
python操作es数据库
安装elasticsearch包,参考 官方文档
pip install elasticsearch
create 如果文档不存在就创建,但如果文档存在就返回错误
index 如果文档不存在就创建,如果文档存在就更新
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果文档id不存在就返回错误
其中index是比较常用的。还有bulk的操作,某一个操作失败,不会影响其他文档的操作,并会在返回结果中告诉你失败的详细原因。
如果插入数据信息有问题想修正,可以采用update方法
注意:更新数据时采用{“doc”:{“name”:“python1”,“addr”:“深圳1”}}字典模式,尤其是doc标识不能缺少。
删除数据比较简单,指定文档的索引、文档类型和文档ID即可。
游标查询(scroll查询):可以用于对ES有效地执行大批量的文档查询,而又不用付出深度分页那种代价。
多文档操作:multi_get 和 bulk,适合批量操作
注意:创建索引库和索引时,索引库名称必须全部小写,不能以下划线开头,不能含逗号;如果没有指定ID,es会自动生成随机ID
es写入数据时有个刷新时间间隔默认1s,所以当时写入,要过一小会儿才能查询到
创建索引时的设置
索引刷新频率:数据写入后几秒可以被搜索到,默认是 1s。每次索引的 refresh 会产生一个新的 lucene 段,这会导致频繁的合并行为,如果业务需求对实时性要求没那么高,可以将此参数调大。
映射和数据类型
映射(mapping)
映射是定义一个文档及其所包含字段如何被存储和索引的方法。
避免类型陷阱:
It is no longer possible to delete the mapping for a type. Instead you should delete the index and recreate it with the new mappings.
在一个Elasticsearch的索引中,有相同名称字段的不同映射类型在Lucene内部是由同一个字段支持的。这会导致一些问题,比如,当你希望在一个索引中的两个映射类型,一个映射类型中的 deleted 字段映射为一个日期数据类型的字段,而在另一个映射类型中的 deleted 字段映射为一个布尔数据类型的字段,这就会失败。最重要的是,在一个索引中存储那些有很少或没有相同字段的实体会导致稀疏数据,并且干扰Lucene有效压缩文档的能力。基于这些原因,我们决定从Elasticsearch中删除映射类型的概念。
数据类型
es中的文档等价于java中的对象,是强数据类型。
text 类型
用来索引长文本(如新闻正文、邮件内容等),在建立索引前会将这些文本进行分词,转化为词的组合,建立索引。允许es来检索这些词语。不能用来排序和聚合。
keyword 类型
适合简短、结构化字符串,如email地址、手机号等,可以用于过滤、排序、聚合检索,也可以用于精确查询。不需要进行分词。keyword 类型字段只能用本身来进行检索。
数字类型
日期类型
布尔类型
JSON 文档中同样存在布尔类型,不过 JSON 字符串类型也可以被 ES 转换为布尔类型存储,前提是字符串的取值为 true 或者 false,布尔类型常用于检索中的过滤条件。
大批量数据查询
出于可靠性、数据传输大小、服务器稳定性等等多方面的原因,es不接受一次性对数据库的所有内容进行遍历。es默认支持的查询数量是10,000。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210928.html原文链接:https://javaforall.net
