ES 搜索3 (查找多个精确值)

2023-11-18

查找多个精确值

term 查询对于查找单个值非常有用,但通常我们可能想搜索多个值。 如果我们想要查找价格字段值为 $20 或 $30 的文档该如何处理呢?

不需要使用多个 term 查询,我们只要用单个 terms 查询(注意末尾的 s ), terms 查询好比是 term查询的复数形式(以英语名词的单复数做比)。

它几乎与 term 的使用方式一模一样,与指定单个价格不同,我们只要将 term 字段的值改为数组即可:

{
    "terms" : {
        "price" : [20, 30]
    }
}

与 term 查询一样,也需要将其置入 filter 语句的常量评分查询中使用:

GET /my_store/products/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "terms" : {  1
                    "price" : [20, 30]
                }
            }
        }
    }
}

这个 terms 查询被置于 constant_score 查询中

 

运行结果返回第二、第三和第四个文档:

"hits" : [
    {
        "_id" :    "2",
        "_score" : 1.0,
        "_source" : {
          "price" :     20,
          "productID" : "KDKE-B-9947-#kL5"
        }
    },
    {
        "_id" :    "3",
        "_score" : 1.0,
        "_source" : {
          "price" :     30,
          "productID" : "JODL-X-1937-#pV7"
        }
    },
    {
        "_id":     "4",
        "_score":  1.0,
        "_source": {
           "price":     30,
           "productID": "QQPX-R-3956-#aD8"
        }
     }
]

包含,而不是相等

一定要了解 term 和 terms 是 包含(contains) 操作,而非 等值(equals) (判断)。 如何理解这句话呢?

如果我们有一个 term(词项)过滤器 { "term" : { "tags" : "search" } } ,它会与以下两个文档 同时 匹配:

{ "tags" : ["search"] }
{ "tags" : ["search", "open_source"] }  1

1 尽管第二个文档包含除 search 以外的其他词,它还是被匹配并作为结果返回。

 

查询优化:

假设有
{ "tags" : ["search"] }
{ "tags" : ["search", "open_source"] }
两个文档,{ "term" : { "tags" : "search" } }都能匹配,但想只搜索包含一个的值,怎么办?
插入数据时多加一个长度字段:
{ "tags" : ["search"], "tag_count" : 1 }
{ "tags" : ["search", "open_source"], "tag_count" : 2 }
查找时加上tag_count精确查找即可。

精确相等

如果一定期望得到我们前面说的那种行为(即整个字段完全相等),最好的方式是增加并索引另一个字段, 这个字段用以存储该字段包含词项的数量,同样以上面提到的两个文档为例,现在我们包括了一个维护标签数的新字段:

{ "tags" : ["search"], "tag_count" : 1 }
{ "tags" : ["search", "open_source"], "tag_count" : 2 }

一旦增加这个用来索引项 term 数目信息的字段,我们就可以构造一个 constant_score 查询,来确保结果中的文档所包含的词项数量与要求是一致的:

GET /my_index/my_type/_search
{
    "query": {
        "constant_score" : {
            "filter" : {
                 "bool" : {
                    "must" : [
                        { "term" : { "tags" : "search" } },  1
                        { "term" : { "tag_count" : 1 } }  2
                    ]
                }
            }
        }
    }
}

查找所有包含 term search 的文档。

确保文档只有一个标签。

这个查询现在只会匹配具有单个标签 search 的文档,而不是任意一个包含 search 的文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES 搜索3 (查找多个精确值) 的相关文章

  • elasticsearch启动报错

    系统 操作centos7 虚拟机 bin elasticsearch 启动报错 es1 es1 software elasticsearch 6 3 1 bin elasticsearch Exception in thread main
  • ES学习之分片路由

    本文主要内容 1 路由一个文档到一个分片 2 新建 索引和删除请求 3 取回单个文档 4 局部单个文档 5 多文档模式 6 理解一下ES深度分页 from size 的劣势 路由一个文档到一个分片 当索引一个文档的时候 文档会被存储到一个主
  • ELK系列(三)、安装Logstash插件及打包离线安装包

    Logstash有input output filter codec 四种插件类型 支持的种类也很丰富 功能特别强大 选对正确的插件可以节省很多的资源占用和开发效率 生产环境一般都无法连接到公网 所以本篇就带大家如何在线安装 以及打包离线安
  • bleve和es RediSearch 区别

    目录 区别 bleve支撑多大的数据量 bleve是否支持集群和分布式 bleve主要应用场景 区别 Bleve 和 Elasticsearch 是两个不同的搜索引擎库 而不是像 Bleve 和 RediSearch 那样相互竞争的产品 B
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • docker 安装elasticsearch以及kibana

    1 安装elasticsearch 1 1 拉取镜像 执行下面的命令将es的镜像拉取到本地 docker pull docker elastic co elasticsearch elasticsearch 6 5 0 1 2 启动容器 没
  • es分布式架构和原理分析

    es的分布式架构 前言 这篇初识ElasticSearch文章中 说明了es的集群的核心概念 回顾一下 关于节点 一个运行中的 es实例称为一个节点 而集群是由一个或者多个拥有相同cluster name 配置的节点组成 它们共同承担数据和
  • 【elasticsearch】elasticsearch节点异常崩溃问题处理

    一 前言 今天对es集群做扩容节点操作 新增了一台节点 启动节点后 没过15分钟 监控报警节点es服务端口异常 第一次看日志并没有发现太明显的错误 于是并没有做操作 直接将该节点重新启动 结果不到10分钟时间 节点又崩溃了 看来得排查下问题
  • es 中关于 term,match, text, keyword

    转自 https blog csdn net qq 38043440 article details 101678677 最近项目中使用了ElasticSearch 在使用基本的查询功能的时候 遇到些头疼的事情 有时候数据明明存在 用ter
  • java编写es搜索程序

    开发环境 java8 springboot pom文件导入依赖
  • 【ES】Elasticsearch Java Rest Client (Document APIs)官方文档中文翻译

    这里写目录标题 一 文档APIs 1 单文档 API Index API Get API Get Source API Exists API Delete API Update API Term Vectors API 2 多文档 API
  • es批量增删改

    批量增删改 bulk 操作将文档的增删改查一系列操作 通过以此请求全部做完 减少网络传输次数 POST bulk 注意 bulk操作的形式是多个json 每个json写完必须换行 而在json内则不可以换行 多个json之间操作互不影响 即
  • ES设置常规数据字段属性

    index 是否可被搜索 示例如下 PUT es 0001 mappings properties name type keyword index false POST es 0001 doc name James GET es 0001
  • ES词典热加载-通过修改ik分词器源码实现热加载自定义词典

    逻辑 自定义词典的数据从mysql加载 只需要重启一次ES即可 后续热加载 实现 在自定义词典的init方法中实现每隔一定时间读取mysql并写入自定义词典的逻辑
  • es统计所有数量的坑

    最近在统计线上的数量时 会发现始终都是10000 觉得很奇怪 先来说一下场景 我使用的是7 2版本的es 需要统计所有数量 后来发现数量下面有个relation gte的属性 然后在网上一搜 发现es 7 X在数据量很大时 数量都会是100
  • ES使用小结

    ES使用总结 1 查询es全部索 2 根据es索引查询文档 3 查看指定索引mapping文件 4 默认查询总数10000条 5 删除指定索引文档 6 删除所有数据包括索引 7 設置窗口值 8 logstash简单配置 Logstash配置
  • ELK 性能优化实践

    点击上方蓝色 方志朋 选择 设为星标 回复 666 获取独家整理的学习资料 一 背景介绍 近一年内对公司的 ELK 日志系统做过性能优化 也对 SkyWalking 使用的 ES 存储进行过性能优化 在此做一些总结 本篇主要是讲 ES 在
  • ES删除数据

    ES删除数据 注意 删除数据请谨慎执行 删除大于 日期的 其他场景可参照执行 DeleteQuery deleteQuery new DeleteQuery deleteQuery setIndex es中 index deleteQuer
  • filebeat多个日志输出多条索引

    vim filebeat yml filebeat prospectors type log enabled true paths opt zcsy hbase logs hbase hadoop regionserver cd zcsy
  • 记一次ElasticSearch 更改 mapping 字段类型的过程

    我的个人博客 逐步前行STEP 首先 es不支持直接更改mappinng 所以 更改 mapping 实质上是重建索引 操作步骤如下 1 为当前这个索引old index设置一个别名my index curl XPOST localhost

随机推荐

  • dynamic_cast报错 异常

    转载请标明是引用于 http blog csdn net chenyujing1234 代码 http www rayfile com zh cn files 89459c23 7a0b 11e1 908f 0015c55db73d UnH
  • RabbitMQ使用详解

    文章目录 RabbitMQ 一 简介 二 rabbitmq基本原理 三 安装 3 1安装erlang环境 3 2 安装rabbitmq 3 3 使用docker安装 四 RabbitMQ程序的编写 4 1 rabbitMQ支持的消息模型 4
  • ElementUI怎样修改组件的css样式?

    1 开发中遇到的问题 需求 修改elementUI 中 环形 progress 宽度 由于父容器的宽度不确定 不能使用 width 属性设置宽度值 html代码如下
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • Spring Boot入门必会(基本介绍+依赖管理+自动装配)

    目录 一 基础入门 1 Spring Boot 是什么 2 SpringBoot 快速入门 2 1完成步骤 2 2快速入门小结 3 Spring SpringMVC SpringBoot 的关系 3 1梳理关系 3 2如何理解 约定优于配置
  • 青少年ptyhon可以参加的主流比赛大全

    青少年python教学视频ppt源码 青少年python系列目录 老程序员115的博客 CSDN博客 一 全国青少年软件编程等级考试 主办单位 中国电子学会 全国青少年电子信息科普创新联盟 网址 http www qceit org cn
  • React WebApp键盘遮挡输入框?

    写在前面 由于近期工作实在太忙 正在赶项目 抽不出时间整理平时遇到的坑 隔了很长时候没有给大家更新文章了 这次正好利用这个单休的时间写一篇开发时遇到的坑 大家如果有什么好的建议和意见欢迎投递哦 邮箱 lcczmy 163 com 本人使用的
  • 多数据源配置(Oracle+MySql),拿来即用

    前言 此次配置使用Druid数据源 1 pom文件
  • Python爬虫:抓取智联招聘岗位信息和要求(进阶版)

    本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者 王强 想要学习Python Python学习交流群 1039649593 满足你的需求 资料都
  • Linux添加永久静态路由信息

    首先让我们查看一下当前机器的路由表 执行如下命令 route n 当前本机只有一条默认路由 网关是192 168 142 1 Linux添加永久静态路由信息 然后我们确认一下当前工作的网卡 这里我们使用的是eth0 补充 如果机器中存在多块
  • 在Linux虚拟机中普通用户和超级用户直接的切换——指令

    Linux虚拟机中普通用户和超级用户直接的切换 指令 1 普通用户切换到root用户 普通用户到高级用户 su root 切换到root用户 输入的命令就是设置的root的密码 或者输入 redhat fengshuai su 也可以切换到
  • 特征筛选2——皮尔逊相关系数筛选(单变量筛选)

    值域为正负1之间 用来筛查单变量与预测结果之间的相关关系 一般来讲 绝对值在0 0 1之间 无关 绝对值在0 1 0 3之间 弱相关关系 绝对值在0 3 0 6之间 存在相关关系 绝对值在0 6 0 9之间 强相关关系 绝对值大于0 9 几
  • BGP边界网关协议相关内容

    BGP 边界网关协议 AS 自治系统 由单一机构组织管理的一系列IP网络及其设备的集合 原因 1网络范围太大 协议跑不过来 需要划分 2自治管理 为了区分不同的AS 我们给每个自治系统设计一个编号 AS号 16位二进制构成 0 65535
  • Textiew常用设置

    Textiew常用设置 Android autoLink设置是否当文本为URL链接 email 电话号码 map时 文本显示为可点击的链接 可选值 none web email phone map all android autoText如
  • C#基础知识整理四

    上一个知识点整理 已经整理到了结构体方面了 顺便把访问修饰符也一起整理了 今天继续向下整理知识点 今天来了解一下类和面向对象的知识 1 类 什么是类 简单来说就是分类 他是描述具有相同特征 属性 和行为 方法 的抽象就是类 他是用关键字cl
  • Redis中的Hash

    1 前言 本篇博客将介绍Redis中五大类型之一的Hash类型及一些其常用命令 Reids中的Hash是一个键值对类型的集合 类似于Java里面的Map
  • 参数估计

    百度百科解释 参数估计 parameter estimation 是根据从总体中抽取的样本估计总体分布中包含的未知参数的方法 人们常常需要根据手中的数据 分析或推断数据反映的本质规律 即根据样本数据如何选择统计量去推断总体的分布或数字特征等
  • VirtualBox没有64位选项,无法安装64位的解决方法 感谢源作者

    昨天碰到了一个让我惊奇的问题 以前从来没有碰到过 早些年一直用 VM 都是草民肯定买不起VM授权 都是各种的破解版 对吧 这几年vm的破解几乎没有了 反正也不怎么好用就一直用VirtualBox 但是昨天竟然没有办法现在64系统 如果不能安
  • JS使用showModalDialog弹出窗口获得弹出窗口设定的值

    父窗口 hello html
  • ES 搜索3 (查找多个精确值)

    查找多个精确值 term 查询对于查找单个值非常有用 但通常我们可能想搜索多个值 如果我们想要查找价格字段值为 20 或 30 的文档该如何处理呢 不需要使用多个 term 查询 我们只要用单个 terms 查询 注意末尾的 s terms