一、倒排索引的结构介绍
1、单词词典:记录所有文档单词,单词到倒排列表的关系;
2、倒排列表:记录了单词对应的文档id;
3、倒排索引项:a 文档id b 词频 c 位置(单词在文本中的位置)d 偏移:单词开始结束位置;
二、mapping映射
mapping映射类似于数据库的字段类型
1、静态映射(手动创建直接指定)
put /索引名
{
"mappings":{
"properties":{
"time":{
"type":"date"
},
"name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
2、动态映射
直接添加文档动态生成;
注意*mapping映射新增字段可以动态映射,mapping修改字段不支持;
(修改字段会导致倒排索引发生变化,可采用索引重建修改字段属性)
三、Dsl查询
es提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,她是利用RestApi船体JSON格式请求体数据与es进行交互;
分页查询
GET /索引名/_search
{
"query":{
"match_all":{}
},
"from":0,
"size":1000
}文章来源:https://www.toymoban.com/news/detail-811079.html
查询窗口限制值最大默认10000;可设置更大值,过多的数据加载到内存中影响性能(可采用scroll api更高效的请求大量数据集);
深分页scroll
GET /索引名称/_search?scroll=1m
{
"query":{
"match_all":{}
},
"size":10
}
查询结果会返回游标id,根据id再次进行分页查询;
采用游标id查询
GET /_search/scroll
{
"scroll":1m,
"scroll_id":"FGJkksdoiuhernnkidfFJHEkjsudjask"
}
(注意*新增数据快照中没有,有新数据插入时会有精准度的问题)
条件查询
match
会对所查询的关键词进行分词,然后再按分词匹配查询
GET /索引名称/_search
{
"query":{
"match":{
"title":"java设计模式"
}
},
"size":10
}
"operator":"and" :表示分词后所有的分词都要有
GET /索引名称/_search
{
"query":{
"match":{
"title":{
"query":"java设计模式",
"operator":"and"
}
}
},
"size":10
}
match_phrase
短语匹配,会将关键字进行分词且所有分词必须都包含,并且分词的顺序要是连续的(倒排索引项中的单词位置位置);如java设计模式分词成 java 设计模式 设计 模式 以下语句时查询不出的结果的 ;
GET /索引名/_search
{
"query":{
"match_phrase":{
"title":"java设计"
}
},
"size":10
}
"slop":1:位置间隔一个次也可以匹配 可查询出结果
GET /索引名/_search
{
"query":{
"match_phrase":{
"title":{
"query":"java设计",
"slop":1
}
}
},
"size":10
}
multi_match
多字段查询
GET /索引名称/_search
{
"query":{
"multi_match":{
"query":"java",
"fieids":[
"title":"java设计模式",
"name":"张三",
]
}
},
"size":10
}
query_string
所有字段检索
GET /索引名/_search
{
"query":{
"query_string":{
"query":"java or 设计模式",
}
},
"from":0,
"size":1000
}
指定字段
GET /索引名/_search
{
"query":{
"query_string":{
"fields":["name","title"],
"query":"java OR 设计模式",
}
},
"from":0,
"size":1000
}
精准查询
term用来使用关键词查询,还可以用来查询没有被分词的数据类型;
GET /索引名称/_search
{
"query":{
"term":{
"title.keyword":"java设计模式"
}
},
"size":10
}
(*注意分词会将英文大写变为小写)可通过配置修改
term查询优化:使用filter忽略算分处理,提升查询性能;
filter大量的查询可以触发缓存,提升性能;
GET /索引名称/_search
{
"query":{
"constant_score":{
"filter":{
"term":{
"title.keyword":"java设计模式"
}
}
}
},
"size":10
}
范围查询
POST/索引名称/_search
{
"query":{
"rang":{
"age":{
"gte":25,
"lte":32
}
}
},
"size":10
}
高亮查询不做过多介绍,自行了解文章来源地址https://www.toymoban.com/news/detail-811079.html
到了这里,关于ElasticSearch(三)高级查询语法(DLS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!