暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

跟我学ElasticSearch-基本操作篇

Java2B 2021-08-26
481

ElasticSearch基本操作

基本操作在学习过程中可以使用单测工具进行,在安装包中提供了postman、jmeter安装包。

大家可以根据自己的喜好选择。

因为在学习使用http请求操作Es,必须对RESTful 风格有所了解,所以在学习基本操作前,对RESTful 知识进行补充:

RESTful 在两方面做了相应规范:

1、服务数据交互格式使用json、xml。

2、采用HTTP协议规定的GET、POST、PUT、DELETE动作处理资源的增删改查操作

MethodCRUD
POSTcreate(update、delete)
GETquery
PUTupdate (create)
Deletedelete

4.1 ElasticSearch语法

mapping字段详解

名称作用描述
type字段数据类型,可选值参考" type可选类型"
analyzer指定分词器,一般使用最大分词:ikmaxword
index该字段是否会被索引和可查询 默认true
store默认情况false,其实并不是真没有存储,_source字段里会保存一份原始文档
normalizer字段标准化规则;如把所有字符转为小写
boost字段权重;用于查询时评分,关键字段的权重就会高一些,默认都是1;另外查询时可临时指定权重
coerce清理脏数据:1,字符串会被强制转换为整数 2,浮点数被强制转换为整数
copy_to自定_all字段;指定某几个字段拼接成自定义
doc_valuestrue 加快排序、聚合操作,但需要额外存储空间;默认true,对于确定不需要排序和聚合的字段可false
dynamic默认true, #新字段动态添加 true:无限制 false:数据可写入但该字段不保留 'strict':无法写入抛异常
enabled默认true, 是否会被索引,但都会存储;可以针对一整个_doc
fielddata默认false,针对text字段加快排序和聚合.此项官网建议不开启,非常消耗内存
eagerglobalordinals默认true,是否开启全局预加载,加快查询;此参数只支持text和keyword,keyword默认可用,而text需要设置fielddata属性
format格式化 此参数代表可接受的时间格式
"yyyy-MM-dd HH:mm:ss\
ignore_above100 指定字段索引和存储的长度最大值,超过最大值的会被忽略
ignore_malformed默认 false,插入文档时是否忽略类型 默认是false 类型不一致无法插入
index_optionsdocs . docs(索引文档号) \ freqs(文档号 + 词频)\ positions(文档号 + 词频 + 位置,通常用来距离查询) offsets(文档号 + 词频 + 位置 + 偏移量,通常被使用在高亮字段)
fields可以对一个字段提供多种索引模式,使用text类型做全文检索,也可使用keyword类型做聚合和排序
normstrue 用于标准化文档,以便查询时计算文档的相关性。建议不开启
null_value可以让值为null的字段显式的可索引、可搜索
positionincrementgap0,词组查询时可以跨词查询 既可变为分词查询 默认100
properties嵌套属性,例如该字段是音乐,音乐还有歌词,类型,歌手等属性
search_analyzer查询分词器;一般情况和analyzer对应
similarity用于指定文档评分模型,参数有三个
BM25 : ES和Lucene默认的评分模型 
classic: TF/IDF评分 
boolean:布尔模型评分
term_vector默认 "no" ,不存储向量信息 
yes : term存储 (term存储) 
withpositions (term + 位置) 
with
offsets (term + 位置)
withpositionsoffsets(term + 位置 + 偏移量) 
对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用

type 可选类型

类型具体值
字符串型text (会分词建立索引),keyword(直接建立索引)
整数类型integer,long,short,byte
浮点类型double,float,halffloat,scaledfloat
逻辑类型boolean
日期类型date
范围类型range
二进制类型binary
数组类型array
对象类型nested
地理坐标类型geo_point
地理地图geo_shape
IP类型ip
范围类型completion
令牌计数类型token_count
附件类型attachment
抽取类型percolator

4.2 通过HTTP请求创建

4.2.1 仅创建索引

请求方式选择 PUT

请求链接在URL一级目录输入需要创建的索引

比如我们一个shop的索引

http://127.0.0.1:9200/shop


4.2.2 创建索引的同时创建mapping 以及分片复制参数

传入body参数执行

  1. {

  2. "settings" : {

  3. "number_of_shards":5,

  4. "number_of_replicas" : 1,

  5. "refresh_interval":"30s"

  6. },

  7. "mappings":{

  8. "properties":{

  9. "shopid":{

  10. "type":"text",

  11. "store":false,

  12. "index":true

  13. },

  14. "shopname":{

  15. "type":"text",

  16. "store":false,

  17. "index":true

  18. },

  19. "shopdesc":{

  20. "type":"text",

  21. "store":false,

  22. "index":true

  23. }

  24. }

  25. }

  26. }

postman截图


4.2.3 删除索引库

请求方式选择Delete

请求链接如:http://127.0.0.1:9200/shop 删除shop索引


4.2.3 向索引库中添加文档

请求方式选 POST

单条插入

请求url : http://127.0.0.1:9200/shop/doc/1 (索引/"doc"/文档id)

或者http://127.0.0.1:9200/shop/_doc

文档id为Es中的文档主键id,不指定的情况下Es会给我们生成一个唯一的随机字符串,如 BU7pG24Bm2YrPBUaN0wD

  1. {

  2. "shopid":"1234",

  3. "shopname":"你的小店",

  4. "shopdesc":"你的小店,只为喂饱你的胃"

  5. }

postman截图


批量添加:

请求url:http://127.0.0.1:9200/shop/_bulk

  1. { "index":{} }

  2. { "shopid":"1234656","shopname":"fox" ,"shopdesc":"亲承5为自己生下5个孩子 此前12个" }

  3. { "index":{} }

  4. { "shopid":"1234657","shopname":"乒联" ,"shopdesc":"国际乒联奥地利公开赛正赛展开" }

  5. { "index":{"_id":"iikdjsd"} }

  6. { "shopid":"1234658","shopname":"纷纷两连败" ,"shopdesc":"两连败+二当家伤停再遭困境 考验欧文.." }

  7. { "index":{"_id":"iik3325"} }

  8. { "shopid":"1234659","shopname":"纷纷返回" ,"shopdesc":"33+9+4+5误!这是最乔治!黑贝最.." }

index可以指定参数,比如指定id,不指定则默认生成id

postman截图:


4.2.3 删除文档

请求方式选择Delete

请求url : http://127.0.0.1:9200/shop/doc/1 (索引/"doc"/文档id)

4.2.4 查询文档

请求方式选择Get

请求url : http://127.0.0.1:9200/shop/doc/1 (索引/"doc"/文档id)

4.2.5 修改文档

请求方式选择POST

请求url : http://127.0.0.1:9200/shop/doc/1 (索引/"doc"/文档id)

  1. {

  2. "shopname":"fox"

  3. }

4.2.6 根据关键词查询文档

请求方式选择Get

请求url http://127.0.0.1:9200/shop/doc/search (索引/"doc"/"search")

请求参数query、term为固定命令,shopdesc为指定在哪个字段查询什么关键字(支持什么样的关键字查询取决于mapping里指定的分析器,比如单个字为索引、分词索引,之前测试的语句都是标准分词,以单个字为索引,所以查询的时候只支持一个汉字,如果输入多个则查询不到数据)

  1. {

  2. "query":{

  3. "term":{

  4. "shopdesc":"店"

  5. }

  6. }

  7. }

postman截图


4.2.7 queryString查询

queryString是讲输入参数进行分词然后去索引库中检索。

请求方式选择Get

请求url http://127.0.0.1:9200/shop/doc/search

请求参数

  1. {

  2. "query":{

  3. "query_string":{

  4. "default_field":"shopname",

  5. "query":"小店"

  6. }

  7. }

  8. }

postman截图


文章转载自Java2B,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论