ElasticSearch(三)高级查询语法(DLS)

这篇具有很好参考价值的文章主要介绍了ElasticSearch(三)高级查询语法(DLS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、倒排索引的结构介绍

        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

}

查询窗口限制值最大默认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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ES专题】ElasticSearch 高级查询语法Query DSL实战

    个人在学习的过程中,感觉比较吃力的地方有如下: 语法结构比较陌生 没有中文文档, 只能看英文 其他博客也比较少介绍语法结构。比如说,为什么查询中会出现 query 有ES入门基础,且想进一步学习ES基本操作的朋友 系列上一篇文章:《【ES专题】ElasticSearch快速入

    2024年02月06日
    浏览(49)
  • Elasticsearch数据结构与查询语法

    Elasticsearch是一个基于Lucene的搜索引擎,它提供了实时、可扩展、可伸缩的搜索功能。Elasticsearch是一个分布式、实时的、多用户的搜索和分析引擎。它是基于Lucene的搜索引擎,用于实时、可扩展、可伸缩的搜索功能。Elasticsearch是一个分布式、实时的、多用户的搜索和分析引擎

    2024年02月21日
    浏览(37)
  • 微服务分布式搜索引擎 ElasticSearch 查询文档

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ElasticSearch 的查询依然是基于 JSON风格的DSL 来实现的。 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的

    2023年04月15日
    浏览(47)
  • 分布式搜索引擎ElasticSearch的RestClient查询文档

         

    2024年02月12日
    浏览(62)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(49)
  • elasticsearch 查询语法

    match_all 查询所有 match 单字段匹配查询 multi_match 多字段匹配查询 term 精确查询 terms 多精确查询 fuzzy 模糊匹配选择展示指定字段 过滤字段 includes:来指定想要显示的字段 excludes:来指定不想要显示的字段 exists 查询字段age存在且id等于45的数据 组合查询 排序+分页

    2023年04月12日
    浏览(41)
  • ElasticSearch - DSL查询语法

    目录 DSL查询分类 全文检索查询 精确查询 地理查询 复合查询 相关性算分 算分函数查询 BooleanQuery DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询 常见的查询类型包括: 查询所有:查询出所有的数据,一般测试用;例如:match_all 全文检索(full text)查询

    2023年04月08日
    浏览(47)
  • 【ElasticSearch】DSL查询语法

    Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。官方文档: 其中,常见的查询类型有: 查询所有 :查询出所有数据,一般测试用。例如: 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: 精确查询 :根据精确

    2024年02月16日
    浏览(43)
  • Elasticsearch的高级查询

    目录 一、条件查询 1、单条件 1)路由查询  2)body体查询 2、多条件查询 1)and---must  2)or---should 3)范围---filter 3、全文检索、完全匹配、高亮显示  二、聚合查询 1、分组 2、求平均值 1)路由查询 方法:get url :http://localhost:9200/wenzhang/_search?q=name:蜡笔 介绍:q后面跟的是字

    2024年02月13日
    浏览(38)
  • 2、ElasticSearch高级查询

    下面这种写法,有没有body体,都可以查询所有文档,建议写上body体。 body体中的\\\"query\\\" 代表的是一个查询对象,里面可以有不同的查询属性。 \\\"match_all\\\"表示查询类型,match_all代表查询所有。还有 match,term , range 等查询类型,可以参考下面写法。 match 匹配类型查询,会把查询

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包