首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

包含not contains的ElasticSearch查询

基础概念

Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,它提供了一个 RESTful API 来进行全文搜索、结构化搜索和分析。在 Elasticsearch 中,查询可以使用各种查询 DSL(Domain Specific Language)来构建。

包含与不包含查询

  • 包含查询:通常使用 matchterm 查询来实现,用于查找包含特定词汇的文档。
  • 不包含查询:可以使用 bool 查询结合 must_not 子句来实现,用于查找不包含特定词汇的文档。

示例查询

假设我们有一个索引 products,其中包含以下字段:

  • name (产品名称)
  • description (产品描述)

我们希望查找所有不包含特定词汇(例如 "outdated")的产品。

查询示例

代码语言:txt
复制
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "outdated"
          }
        },
        {
          "match": {
            "description": "outdated"
          }
        }
      ]
    }
  }
}

优势

  • 灵活性:Elasticsearch 提供了丰富的查询 DSL,可以构建复杂的查询逻辑。
  • 性能:Elasticsearch 是分布式的,可以处理大规模数据和高并发查询。
  • 实时性:Elasticsearch 支持近实时搜索,数据更新后可以快速被搜索到。

类型

  • 全文查询:如 matchmulti_match 等。
  • 精确查询:如 termterms 等。
  • 复合查询:如 boolnested 等。
  • 范围查询:如 range 等。

应用场景

  • 日志分析:Elasticsearch 常用于日志收集和分析,可以快速搜索和分析大量日志数据。
  • 全文搜索:适用于电商网站、博客平台等需要全文搜索的场景。
  • 监控和告警:可以用于监控系统状态,设置告警规则。

常见问题及解决方法

1. 查询结果不准确

原因:可能是由于分词器(tokenizer)或分析器(analyzer)配置不当,导致查询词汇被错误地分词。

解决方法:检查索引的映射(mapping)配置,确保使用合适的分词器和分析器。

2. 查询性能差

原因:可能是由于数据量过大、索引设计不合理或查询语句复杂度过高。

解决方法

  • 优化索引设计,合理设置分片和副本数量。
  • 使用合适的分片策略,避免单个分片过大。
  • 优化查询语句,减少不必要的字段查询和复杂逻辑。

3. 查询超时

原因:可能是由于查询语句过于复杂,或者集群负载过高。

解决方法

  • 优化查询语句,减少查询范围和复杂度。
  • 增加集群资源,如节点数量或硬件配置。
  • 设置合理的超时时间,避免长时间等待。

参考链接

希望这些信息对你有所帮助!如果有更多具体问题,欢迎继续提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ElasticSearch 查询的秘密

Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/...(Fields) 一个 Elasticsearch 集群可以包含多个索引(数据库),也就是说其中包含了很多类型(表)。...这些类型中包含了很多的文档(行),然后每个文档中又包含了很多的字段(列)。...这棵树不会包含所有的term,它包含的是term的一些前缀。通过term index可以快速地定位到term dictionary的某个offset,然后从这个位置再往后顺序查找 ?...联合索引 上面说了半天都是单field索引,如果多个field索引的联合查询,倒排索引如何满足快速查询的要求呢?

1.3K20
  • elasticsearch的查询流程分析

    才能完整的查询到我们想要的结果。...找到所有匹配的结果是查询的第一步,来自多个shard上的数据集在分页返回到客户端的之前会被合并到一个排序后的list列表,由于需要经过一步取top N的操作,所以search需要进过两个阶段才能完成,分别是...(一)query(查询阶段) 当一个search请求发出的时候,这个query会被广播到索引里面的每一个shard(主shard或副本shard),每个shard会在本地执行查询请求后会生成一个命中文档的优先级队列...请求到索引里面每一个主shard或者副本shard上,每个shard会在本地查询然后添加结果到本地的排序好的优先级队列里面。...shard上,然后合并他们的响应结果到一个全局的排序列表中然后进行第二个fetch阶段,注意这个结果集仅仅包含docId和所有排序的字段值,search请求可以被主shard或者副本shard处理,这也是为什么我们说增加副本的个数就能增加搜索吞吐量的原因

    2.7K80

    Elasticsearch查询解析

    背景        Elasticsearch(ES)可用于全文检索、日志分析、指标分析、APM等众多场景,而且搭建部署容易,后期弹性扩容、故障处理简单。...从使用的直观感受看,ES按照下图方式实现了分布式查询: [图1 查询基本流程] 查询可发送到任意节点,接收到某查询的节点会作为该查询的协调节点(Coordinating Node)。...下面我们先简单介绍ES中常见的3类查询: 2.1 QUERY_THEN_FETCH        这是最常用的查询类型,可以完成大多数的分布式查询和聚合分析功能。...关于这类问题的具体描述,可以参考如下文档: 被破坏的相关度 How Shards Affect Relevance Scoring in Elasticsearch 3....此外,查询调度还包含两个轻量级阶段Expand Phase、Reponse Phase,后面我们按照实际执行顺序,依次介绍他们。

    2.8K90

    Elasticsearch常用查询

    前言 本文使用的Elasticsearch版本为6.5.4,上文主要介绍ES的各种查询,以满足更多的需求。ES的主要功能其实就是体现在这搜索查询上,所以我就总结一下,方便以后直接拿来就用。...match_phrase:短语匹配查询,Elasticsearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变...includes:包含某些字段,可以使用通配符进行查询 excludes:排除某些字段,可以使用通配符进行查询 GET /lib3/user/_search { "_source": {...、include_upper、boost include_lower:是否包含范围的左边界,默认是true include_upper:是否包含范围的右边界,默认是true GET /lib3/user...,取值为0-1(包含0和1);对于数值,取值可能大于1;对于日期类型取值为1d,1m等,1d就代表1天 prefix_length:指明区分词项的共同前缀长度,默认是0 max_expansions:查询中的词项可以扩展的数目

    63510

    Elasticsearch查询解析

    背景        Elasticsearch(ES)可用于全文检索、日志分析、指标分析、APM等众多场景,而且搭建部署容易,后期弹性扩容、故障处理简单。...从使用的直观感受看,ES按照下图方式实现了分布式查询: [图1 查询基本流程] 查询可发送到任意节点,接收到某查询的节点会作为该查询的协调节点(Coordinating Node)。...下面我们先简单介绍ES中常见的3类查询: 2.1 QUERY_THEN_FETCH        这是最常用的查询类型,可以完成大多数的分布式查询和聚合分析功能。...关于这类问题的具体描述,可以参考如下文档: 被破坏的相关度 How Shards Affect Relevance Scoring in Elasticsearch 3....此外,查询调度还包含两个轻量级阶段Expand Phase、Reponse Phase,后面我们按照实际执行顺序,依次介绍他们。

    2.4K50

    ElasticSearch Bool查询案例

    ElasticSearch中有一种复杂的查询,bool query,也叫做布尔查询,下面是一个bool查询的case,在项目中遇到的,做一下总结: case产生的背景: 保险业务,由于是分库分表的database...,所以在b端画面的一个查询数据的展示,是通过elasticsearch来检索命中文档的。...或者被保人policyInsurant的英文名字,一定是模糊匹配 case分析: 每一个框的输入,都是or的关系,也就是说投保人姓名或者被保人姓名叫张三的人文档 如果两个框都输入了,两个框之间是and的关系...被保人在es mapping中是一个nested field case的解决思路 模糊查询,首先想到用es中的wildcard query,其次这个查询属于复杂的查询,那么我们可以采用query bool...的查询方式,不了解该查询的可以去学习一下官方文档,然后再进行查询,query bool 查询方式官方文档 case的解决方案: GET my_index/_search { "query":

    1.1K20

    Elasticsearch 常用基本查询

    安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文档进行搜索...API查询文档:   为了展示Elasticsearch中不同查询的用法,首先在Elasticsearch里面创建了employee相关的documents,每本书主要涉及以下字段: first_name...Regexp Query(正则表达式查询)   ElasticSearch还支持正则表达式查询,此方式提供了比通配符查询更加复杂的模式。...比如:我们查询about和interests中包含music关键字的员工,但是我们想过滤出birthday大于2017/02/01的结果,可以如下使用: curl -XPOST :9200/megacorp...Filtered queries在即将发行的Elasticsearch 5.0中移除了,我们可以使用bool查询来替换他,下面是使用bool查询来实现上面一样的查询效果,返回结果一样: curl -XPOST

    69220
    领券