使用ElaticSearch高级查询

高级查询

URL

  • 1、url
get dangdang/order/_search?q=*
q=*//查询所有
sort=price:desc//排序
size=5//查询条数
from=0//条数偏移量,从第0天开始,查询5条,与size同用可实现分页
//参数之间使用&隔开

查询结果解析:

{
 "took": 3,//查询所用的时间ms
 "timed_out": false,//是否超时
 "_shards": {//分片
   "total": 5,//查询5个分片的数据和为一起为一个完整的数据
   "successful": 5,//5个分片执行成功
   "skipped": 0,//跳过0个
   "failed": 0//失败0个
 },
 "hits": {//本次查询击中的数据
   "total": 1,//查询的文档总数
   "max_score": 1,//文档的最大得分,查询所有,得分一致
   "hits": [//查询所击中的文档数组
     {
       "_index": "dangdang",//当前文档的索引
       "_type": "order",//类型
       "_id": "1",//id
       "_score": 1,//得分
       "_source": {//当前文档的原始内容
         "id": "101",
         "name": "闫世坤",
         "price": "9999999.99",
         "count": "1"
       }
     }
   ]
 }
}

DSL

  • 2、DSL检索
GET dangdang/order/_search
{
  "query": { "match_all": {}},//查询所有,与q=*等同
  "size" : 2,//查询条数
  "from" : 0//偏移量  与size同用可实现分页
  "sort": [//排序
   {
     "price": {//对price进行降序
        "order": "desc"
     },
     "count": {//对count进行升序
       "order": "asc"
     }
   },
   "_source": ["name","price"]//返回指定字段
}

- 分词查询(term)

GET dangdang/order/_search
{
 "query": {
   "term": {//分词查询
     "name": {		//1.除text之外的其他类型都不分词
       "value": "闫"//2.ES默认使用的是标准分词器,			
     }				//对英文进行单词分词,
   }				//对中文进行,单字分词,查询时也应使用单个字,
  }					//后期应改变es的默认分词器(IK)
}

- 范围查询(range)

GET dangdang/order/_search
{
  "query": {
   "range": {//根据范围查询
     "price": {//文档属性
       "gte": 10,//大于等于
       "lte": 10000000//小于等于
     }
   }
 }
}

- 前缀查询(prefix)

GET dangdang/order/_search
{
 "query": {
   "prefix": {
     "name": {
       "value": "闫世"//使用时应当对不分词的类型,进行前缀查询
     }
   }
 }
}

通配符查询(wildcard)? *

GET dangdang/orderr/_search
{
  "query": {
    "wildcard":{
      "name": {
        "value":"闫*"//?:一个任意字符,*:0-n个任意字符
      }
    }
  }
}

多id查询(ids)

GET dangdang/order/_search
{
  "query": {
    "ids": {
      "values": ["jFZeR3YBKrAIu2rOHUBx","jVZeR3YBKrAIu2rOQkDC"]
    }
  }
}

模糊查询(fuzzy)

  • 模糊查询允许的出错率是在0-2之间,
    • 0-2是有条件的
      • 当查询条件长度为2时,是不能有错误的,需要全匹配
      • 当查询条件长度为2-5时,允许一个错误
      • 当查询条件>5时,允许有两个错误
GET dangdang/order/_search
{
  "query": {
    "fuzzy": {
      "context": "abc--def"
    }
  }
}

- 布尔查询(bool)

  • must:相当与&&同时成立
  • should:相当于||成立一个就行
  • must-not:相当于!,不能满足任何一个
GET dangdang/order/_search
{
 "query": {
   "bool": {
     "must": [
       {
         "range": {
           "price": {
             "gte": 10,
             "lte": 9999999
           }
         }
       }
     ],
     "must_not": [
       {
         "ids": {
           "values": ["ilZYR3YBKrAIu2rO_ED0"]
         }
       }
     ],
     "should": [
       {
         "prefix": {
           "name": {
             "value": "闫"
           }
         }
       }
     ]
   }
 }
}

- 多字段分词查询(mulit_match)

  • 先分词,再 根据你查询的字段长度和匹配值出现的次数的比例,来算出该文档的得分
GET dangdang/order/_search
{
 "query": {
   "multi_match": {
     "query": "搜索的值",
     "fields": ["name","context"]
   }
 }
}
GET dangdang/order/_search
{
 "query": {
   "query_string": {
     "query": "this AND that OR thus",
     "fields": ["name","context"],
     "analyzer": "simple"//使用指定分词器
   }
 }
}

测试分词器

GET _analyze
{
 "analyzer": "simple",
 "text": ["测试simple分词器"]
}

高亮查询

GET dangdang/order/_search
{
 "query": {
   "term": {
     "context": {
       "value": "山"
     }
   }
 },
 "highlight": {
   "fields": {"context": {}},//将那些字段值进行高亮处理
   "pre_tags": ["<span style='color:red;'>"],//前标签
   "post_tags": ["</span>"],//后标签
   "require_field_match":false//关闭默认根据搜索的字段进行高亮
 }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Data ElasticSearch高级查询是指在使用Spring Data ElasticSearch框架进行查询时,使用一系列高级查询功能来满足特定需求的操作。这些高级查询功能包括基本查询、自定义查询、分页查询和排序等。 在Spring Data ElasticSearch中,为了执行高级查询,我们可以使用ElasticsearchRepository接口提供的search方法。该方法需要一个QueryBuilder参数来构建查询条件。QueryBuilder可以使用QueryBuilders对象提供的方法来创建各种类型的查询,如词条查询、匹配查询等。 例如,如果我们想要执行一个词条查询,可以使用QueryBuilders的matchQuery方法来创建一个MatchQueryBuilder对象,并指定查询的字段和关键词。然后,将该查询对象作为参数传递给search方法,即可执行查询并获取结果。 除了基本查询之外,Spring Data ElasticSearch还提供了其他高级查询功能,如自定义查询、分页查询和排序。自定义查询可以根据具体需求使用不同的查询条件和操作符来构建复杂的查询语句。分页查询可以通过设置分页参数来获取指定范围内的查询结果。排序可以根据指定字段对查询结果进行排序。 总之,Data ElasticSearch高级查询是指使用Spring Data ElasticSearch框架提供的一系列高级查询功能来满足特定需求的操作,包括基本查询、自定义查询、分页查询和排序等。通过使用QueryBuilders对象创建QueryBuilder参数,我们可以构建出各种类型的查询条件,并通过search方法执行查询获取结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Spring Data ElasticSearch高级查询,聚合](https://blog.csdn.net/qq_41879343/article/details/107452444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值