首页 > 其他分享 >(八):ElasticSearch结构化查询 Query DSL

(八):ElasticSearch结构化查询 Query DSL

时间:2024-01-18 17:11:07浏览次数:29  
标签:匹配 GET items 查询 DSL ElasticSearch query Query match

  ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specific language 领域特定语言),被称为Query DSL。

1、准备工作

1.1、测试数据下载

  测试数据下载:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip

  测试数据如下:

0

1.2、测试数据导入

  进入到下载的accounts.json目录,执行如下命令导入数据:

  curl -H "Content-Type: application/json" -XPOST http://localhost:9200/items/_bulk --data-binary @accounts.json

  执行结果如下:

0

  通过访问head插件,查看索引及类型结果:

0

2、基本语法

  完整的语法:

{
   QUERY_NAME:{
      ARGUMENT:VALUE,
      ARGUMENT:VALUE,...
   }
}

   针对某字段的语法:

{
    QUERY_NAME:{
        FIELD_NAME:{
            ARGUMENT:VALUE,
            ARGUMENT:VALUE,...
        }
    }
}

3、match_all - 匹配所有

  match_all是匹配所有的数据,DSL如下:

# 匹配所有数据
GET /items/_search
{
  "query": {"match_all": {}}
  , "sort": [
    {
      "account_number": {
        "order": "desc"
      },
      "age": {
        "order": "desc"
      }
    }
  ]
}

  查询出所有数据,按照 account_number 、 age 倒序输出。

4、macth - 分词匹配

  match_all是匹配所有的数据,match是条件匹配。

# 条件匹配
GET /items/_search
{
  "query": {
    "match": {
      "account_number": 99
    }
  }
}

  match返回的是 account_number:99的记录,执行结果如下:

0

  match会对检索的字段中的值做分词,如 586 Lloyd Court 会分为 586、Lloyd、Court 这三个词。

  查询出address中包含 586 或 Lloyd 或 Court 的所有记录,并给出相关性得分。

0

5、match_phrase - 不分词匹配

  match_phrase不会对检索字段中的值做分词,匹配的值会被当成一个整体单词(不分词)进行检索,短语匹配。

  查询出address中包含 586 Lloyd Court 的所有记录,并给出相关性得分。

0

6、multi_match - 多字段匹配

  多字段匹配,多字段匹配指定内容,对应查询的值会完成分词操作。

GET items/_search
{
  "query": {
    "multi_match": {
      "query": "Putnam Avenue",
      "fields": ["address", "city"]
    }
  }
}

  查询出city或者address中包含 Putnam Avenue 的记录。

0

7、bool - 布尔查询

  布尔查询也被称为组合查询,bool用来实现复合查询。bool通过 must、should、must_not的方式进行组合,合并其他查询语句,实现复杂逻辑查询。

  must表示必须满足,must-not表示必须不满足,should表示不满足条件也会显示,若满足了条件,相关性分数会比较高。

GET /items/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { 
          "age": "28" 
        }}
      ],
      "must_not": [
        { "match": 
        { 
          "gender": "F" 
        }}
      ],
      "should": [
        {"match": {
          "state": "ND"
        }}
      ]
    }
  }
}

   查询age为28,gender不为F,state可以为ND的记录。

0

8、filter - 结果过滤

  filter结果过滤,对字段进行区间取值。

GET /items/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 30000,
            "lte": 35000
          }
        }
      }
    }
  }
}

  查询出账户余额 30000 ~ 35000 的记录。

0

9、term - 匹配非text字段

  term用于匹配某个属性的值,全文检索字段用match,其他非text字段匹配用term。

# term匹配非text字段
GET /items/_search
{
  "query": {
    "term": {
      "account_number": 30
    }
  }
}

  匹配 account_number 为 30 的记录:

0

10、from size - 分页查询

  ES中的记录数过多,可使用分页查询获取数据,使用 from、size 关键字:

# 分页查询 第一页
GET /items/_search
{
  "query": {"match_all": {}},
  "from": 0,
  "size": 2
}

# 第2页
GET /items/_search
{
  "query": {"match_all": {}},
  "from": 2,
  "size": 2
}

  分页查询数据:

0

11、_ids - 多id查询

  对记录的多个id进行查询:

# 多id查询
GET /items/_search
{
  "query": {
    "ids": {
      "values": ["33", "55"]
    }
  }
}

12、_source - 返回指定字段

  使用 _source 指定查询到的字段。

# 返回指定字段
GET /items/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["account_number","balance"]
}

  查询 account_number、balance 字段。

0  

标签:匹配,GET,items,查询,DSL,ElasticSearch,query,Query,match
From: https://www.cnblogs.com/RunningSnails/p/17972889

相关文章

  • (七):ElasticSearch客户端操作
    ElasticSearch服务的客户端,有以下三种方式:·elasticsearch-head插件·elasticsearch提供的Restful接口直接访问·elasticsearch提供的API进行访问1、elasticsearch-head插件启动插件后,访问http://localhost:9100/地址,详情如下:1.1、概览信息概览信息......
  • (五):ElasticSearch基本概念
    1、ElasticSearchElasticsearch是面向文档(documentoriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearc......
  • (二):ElasticSearch安装部署
    1、安装Jdk版本选择:java8、java11、java4,为了兼容Logstash等的兼容性。2、Elasticsearch安装2.1、Elasticsearch下载下载地址:https://www.elastic.co/cn/,点击即刻体验选择下载获取历史版本选择下载Elasticsearch下载指定版本的Elasticsearc......
  • es安装分词插件elasticsearch-analysis-ik(elasticsearch-plugin方式安装)
    环境:OS:Centos7ES:6.8.5 1.查看当前的安装的插件[root@hadoop-slave1soft]#curl-uelastic:123456-XGET"http://192.168.1.63:19200/_cat/plugins?v&s=component&h=name,component,version,description&pretty"namecomponentversiondescription 2.将分......
  • Elasticsearch内核解析 - 数据模型篇【转载】
    原文链接Elasticsearch是一个实时的分布式搜索和分析引擎,它可以帮助我们用很快的速度去处理大规模数据,可以用于全文检索、结构化检索、推荐、分析以及统计聚合等多种场景。Elasticsearch是一个建立在全文搜索引擎库ApacheLucene基础上的分布式搜索引擎,Lucene最早的版本是2......
  • Elasticsearch索引不存在时,查询接口报错怎么办?
    1、索引不存在,报错:type=index_not_found_exception,reason=nosuchindex解决办法:DSL:GET/text_index_003/_search?ignore_unavailable=truejava代码:NativeSearchQuerysearchQuery=newNativeSearchQueryBuilder().withIndicesOptions(IndicesOpti......
  • ElasticSearch中_source、store_fields、doc_values性能比较【转载】
    原文地址请点击在这篇文章中,我想从性能的角度探讨ElasticSearch为我们存储了哪些字段,以及在查询检索时这些字段如何工作。实际上,ElasticSearch和Solr的底层库Lucene提供了两种存储和检索字段的方式:store_fields和doc_values。此外,ElasticSearch默认提供了 _source 字段,这是在......
  • Elastic实战:彻底解决spring-data-elasticsearch日期、时间类型数据读取报错问题
    0.引言在使用spring-data-elasticsearch读取es中时间类型的数据时出现了日期转换报错,不少初学者会在这里困惑很久,所以今天我们专门来解读该问题的几种解决方案。1.问题分析该问题的报错形式一般是:Failedtoconvertfromtype[java.lang.String]totype[java.util.Date]f......
  • 通过Power BI实现数据的实时刷新与展示1-DirectQuery
    使用微软PowerBI实现数据的实时刷新并展示,一直是一个老大难问题。微软在实时刷新展示这个方面做的一直很差,目前官方自动刷新工具Gateway也仅仅能支持最小30分钟/次的频率。但是对于一些经常变动的数据30分钟的刷新频率显然是不够用的,因此就只能自力更生各凭本事了。今天就介绍一......
  • Spring Boot3.x集成ElasticSearch8.x
    SpringBoot3.x集成ElasticSearch8.x版本说明,本demo使用SpringBoot3.2.1+JDK17+ElasticSearch8.11.3前提是已经部署好了自己的ElasticSearch环境,我这里直接用容器默认部署好了,能访问即可创建SpringBoot项目导入pom依赖<dependency><grou......