ElasticSearch查询之exists使用

exists允许你过滤文档,只查找那些在特定字段有值的文档,无论其值是多少。demo如下:

1、索引中的数据如下:

2、查询语句如下

GET account/account/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "sex"
          }
        }
      ]
    }
  }
}

如下可以看到,sex字段为null的文档也没有查询出来

3、java代码实现该查询

/**
 * exists过滤器
 */
@ResponseBody
@RequestMapping("/searchAccountBool")
public List<Account> searchAccountBool(){
    BoolQueryBuilder accountBoolquery = QueryBuilders.boolQuery();
    ExistsQueryBuilder sexQueryBuilder = QueryBuilders.existsQuery("sex");
    accountBoolquery.must(sexQueryBuilder);
    System.out.println(accountBoolquery);
    SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(accountBoolquery).build();
    List<Account> accountList = elasticsearchTemplate.queryForList(searchQuery, Account.class);
    System.out.println(accountList);
    return accountList;
}

4、postman测试

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Elasticsearch 是一个基于 Lucene 的搜索引擎,可以用来存储、搜索和分析大量的数据。以下是一些常用的 Elasticsearch 查询语句: 1. 简单查询:match 和 term - `match` 查询会搜索指定字段中包含指定文本的所有文档。例如: ``` GET /index/_search { "query": { "match": { "title": "elasticsearch" } } } ``` - `term` 查询会搜索指定字段中包含指定词条的所有文档。例如: ``` GET /index/_search { "query": { "term": { "status": "published" } } } ``` 2. 复合查询:bool 和 must/should/must_not - `bool` 查询可以将多个查询条件组合在一起。例如: ``` GET /index/_search { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } }, { "match": { "content": "search" } } ] } } } ``` - `must` 查询要求查询结果必须满足指定条件。例如: ``` GET /index/_search { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } }, { "term": { "status": "published" } } ] } } } ``` - `should` 查询要求查询结果应该满足指定条件之一。例如: ``` GET /index/_search { "query": { "bool": { "should": [ { "match": { "title": "elasticsearch" } }, { "match": { "content": "search" } } ] } } } ``` - `must_not` 查询要求查询结果不能满足指定条件。例如: ``` GET /index/_search { "query": { "bool": { "must_not": [ { "term": { "status": "draft" } } ] } } } ``` 3. 范围查询:range - `range` 查询可以搜索指定字段中的数值或日期范围。例如: ``` GET /index/_search { "query": { "range": { "price": { "gte": 10, "lte": 100 } } } } ``` 4. 全文查询:match_phrase 和 match_phrase_prefix - `match_phrase` 查询要求查询结果必须包含指定短语。例如: ``` GET /index/_search { "query": { "match_phrase": { "title": "elasticsearch query" } } } ``` - `match_phrase_prefix` 查询要求查询结果必须包含指定前缀的短语。例如: ``` GET /index/_search { "query": { "match_phrase_prefix": { "title": "elasticsearch que" } } } ``` 以上是一些常用的 Elasticsearch 查询语句,还有很多其他类型的查询和参数可以使用。详细的文档可以参考 Elasticsearch 官方文档。 ### 回答2: Elasticsearch是一个高性能的分布式全文搜索和分析引擎,可以用于快速地存储、搜索和分析大量数据。Elasticsearch使用标准的JSON格式来操作数据,查询语句也是用JSON格式表示。 在Elasticsearch中,查询语句通过HTTP请求发送给Elasticsearch服务器。查询语句可以包含多个条件和过滤器,以实现灵活的搜索和过滤。以下是一些常用的查询语句示例: 1. 匹配查询(Match Query):通过指定一个字段和一个值来进行匹配。例如,{"match": {"title": "apple"}}将返回包含"title"字段中包含"apple"的文档。 2. 多字段查询(Multi Match Query):可以在多个字段中搜索相同的值。例如,{"multi_match": {"query": "apple", "fields": ["title", "description"]}}将在"title"和"description"字段中搜索包含"apple"的文档。 3. 范围查询(Range Query):根据某个字段的值的范围进行搜索。例如,{"range": {"price": {"gte": 10, "lte": 100}}}将返回"price"字段值在10到100之间的文档。 4. 过滤查询(Filtered Query):可以将一个查询结果再次过滤。例如,{"filtered": {"query": {"match": {"title": "apple"}}, "filter": {"term": {"category": "fruit"}}}}将返回标题包含"apple"并且类别为"fruit"的文档。 5. 分组查询(Aggregations):可以根据某个字段对结果进行分组和统计。例如,{"aggs": {"group_by_category": {"terms": {"field": "category"}}}}将按照"category"字段对结果进行分组。 以上只是一些查询语句的简单示例,Elasticsearch还提供了更多丰富的查询语法和功能,如模糊查询、排序、分页等。根据具体需求,可以结合这些功能来构建更复杂和高效的查询语句。 ### 回答3: Elasticsearch是一个强大的分布式搜索和分析引擎,可以通过查询语句对其进行检索。以下是关于Elasticsearch查询语句的简要介绍: 1. match查询:match查询是基于文本匹配的简单查询,它会根据查询条件返回匹配的文档。 2. term查询:term查询用于精确匹配一个字段的值,不进行分词处理。 3. range查询:range查询用于匹配一个范围内的字段值,可以设置上限和下限。 4. bool查询:bool查询是一个复合查询,可以组合多个条件查询,并设置逻辑关系(AND、OR、NOT)。 5. wildcard查询:wildcard查询可以使用通配符进行模糊匹配。 6. prefix查询:prefix查询用于匹配以指定前缀开头的文档。 7. match_phrase查询:match_phrase查询可以匹配与查询条件完全匹配的文档,而不是仅仅匹配其中的一个词。 8. fuzzy查询:fuzzy查询用于模糊匹配,可以处理拼写错误。 9. exists查询exists查询用于检查某个字段是否存在于文档中。 10. match_all查询:match_all查询可以匹配所有文档,常用于获取全部文档。 以上是一些常用的Elasticsearch查询语句,通过它们可以对文档进行灵活和高效的搜索。同时,Elasticsearch还支持更多复杂的查询语句和特性,可以根据实际需求进行定制化查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值