ES 8.x 新特性:match_phrase 跨值查询中 position_increment_gap 参数用法

news2024/12/23 8:32:19

文章目录

  • 1、概述
  • 2、match_phrase 短语搜索
  • 3、跨值访问
    • 3.1 问题演示
    • 3.2 原因
    • 3.3 解决方案
    • 3.4 position_increment_gap 参数

1、概述

在 ES 中进行短语搜索的时候,为了防止跨值访问,ES 会在每个值之间设置间隙,而这个间隙的默认大小为 100。而这个值也就是 position_increment_gap。

那么什么是跨值访问呢?

2、match_phrase 短语搜索

首先我们要理解 match_phrase 的匹配逻辑,match_phase 的匹配需要遵循以下三个条件

  • match_phrase 会对搜索短语分词(误区)
  • 目标文档需要包含短语分词结果中所有词项
  • 目标文档中匹配的所有词项必须和搜索短语完全相同,切顺序也必须完全相同
  • 目标文档中匹配的所有词项中不能有任何其他不匹配项。

比如,搜索短语:that's a good question

那么以下文档均不符合短语搜索的要求,(暂不考虑文档归一化问题,即语气词通用的情况)

  • yes or no, that’s a question 。
  • yes or no, that’s good a question
  • yes or no, that’s a difficult question
  • yes or no, that’s a difficult good question

短语搜索是对短语分词的,这一点是一个非常容易踩坑的误区,很多人对短语搜索的理解就是文档中包含完整的短语,岁然从搜素结果上看的确是这样的,但是匹配逻辑却不失这样的。这一点需要格外的注意

3、跨值访问

3.1 问题演示

假设我们的 es 集群中存储了以下索引

PUT position_increment_gap_index/_doc/1
{
  "mappings" : {
    "properties" : {
      "title" : {
        "type"   : "text" // slop 默认 100
      }
    }
  }
}

为索引写入一条数据

POST /position_increment_gap_index/_doc/1
{
  "title" : ["elastic org cn", "www elastic co"]
}

当我们对title进行短语搜索的时候,如果符合短语搜索的要求,是可以正常搜索到结果的,比如搜索elastic org cn

GET position_increment_gap_index/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "elastic org cn"
      }
    }
  }
}

结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KwDWWcHY-1670229979294)(https://files.mdnice.com/user/38153/784fc312-67b1-4258-8ac1-1848482c8665.jpg)]

注意

当我们搜索的短语跨越了多个值的时候,比如搜索短语为:org cn www elastic

GET position_increment_gap_index/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "org cn www elastic"
      }
    }
  }
}

此时是搜索不到任何数据的,如下图所示,

3.2 原因

因为 ES 为了防止短语跨多个值访问,在每个值之间设置了默认为 100 的 slot 间隔。目的就是为了避免跨值访问。

3.3 解决方案

如果我们希望短语搜索可以跨越多个值进行访问,可以配置 slot 的值只需大于等于配置的值(默认 100)即可。

比如:slop 配置 100 有数据

GET position_increment_gap_index/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "org cn www elastic",
        "slop": 100
      }
    }
  }
}

结果如下:

3.4 position_increment_gap 参数

当然我们可以通过position_increment_gap参数,人为的配置字段多个值 slop 的值。

下面分别配置了slop默认 100,以及slop为 0 和slop为 10 的两个子字段。

PUT position_increment_gap_index
{
  "mappings" : {
    "properties" : {
      "title" : {
        "type"   : "text", // slop 默认 100
        "fields" : {
          "slop_0" : {
            "type": "text",
            "position_increment_gap" : 0
          },
          "slop_10" : {
            "type": "text",
            "position_increment_gap" :10
          }
        }
      }
    }
  }
}

mapping 创建成功之后,再次写入 3.1 小节中的测试数据,然后对 slot_0 执行同样的查询,因为 slop 配配置为了 0,所以可以直接得出数据。

GET position_increment_gap_index/_search
{
  "query": {
    "match_phrase": {
      "title.slop_0": {
        "query": "org cn www elastic"
      }
    }
  }
}

同样,对 slop_10进行跨值查询。需要设置指定 slop: 10 以上才有数据

GET position_increment_gap_index/_search
{
  "query": {
    "match_phrase": {
      "title.slop_10": {
        "query": "org cn www elastic",
        "slop": 10
      }
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【密码学篇】商用密码产品的密钥体系结构小结

【密码学篇】商用密码产品的密钥体系结构小结 商用密码产品的密钥体系结构笔记小结—【蘇小沐】 文章目录【密码学篇】商用密码产品的密钥体系结构小结1.商用密码产品密钥体系结构(一)服务器密码机密钥体系结构1.服务器密码机密钥体系结构2.服务器密码机…

MySQL 数据库 定义参数【连接查询】

目录 内连接查询(inner join) 左连接查询 left join 右连接 right join 全连接、合并查询 union 内连接查询(inner join) 关键字:inner join on 语句:select * from 表名 inner join 表名 on 条件…

Excel

单元格格式 ,跨列居中, 自动换行 尽量不要使用合并单元格,因为会使得一些单元格无法访问,影响排序,筛选等功能 第四季度销售数据部门类别十月十一月十二月肉类牛肉90000110000120000烘焙品甜点2500080000120000农产品…

基于JAVA的网络通讯系统设计与实现(论文+系统)

(2009届) 本科生毕业设计(论文) 基于Java的网络通信系统设计与实现 学 院、系:计算机与通信学院专 业:通信工程学 生 姓 名:班 级:学号指导教师姓名:职称最终评定成绩…

jest在已有项目中的安装与使用

简单的jest使用配置: npm init -y npm i jest24.8.0 -Dnpx jest --init 生成初始化配置 一个index文件,里面可以写入一些方法,作为测试这个jest.config.js是自动生成的!!!!! index.…

第二十五章《图书管理系统》第1节:图书管理系统简介

图书管理系统具有图书信息管理、读者信息管理和借阅信息管理三大功能模块,本小节将从软件功能、数据库系统设计和项目结构几个方面介绍该软件系统的设计方案。 25.1.1系统功能简介 图书管理系统第一大功能模块是图书信息管理,这个模块的软件界面如图25-1所示。 图25-1图书信…

2011-2019年全国30省绿色经济发展指数和子指数数据

2011-2019年全国30省绿色经济发展指数和子指数数据 1、时间:2011-2019年 2、来源:绿色发展指数BG——区域比较 3、范围:包括全国30个省份不包括西藏 4、指标包括:总指标—绿色化指数、经济增长绿化度指数、资源环境承载潜力指…

1.4 Apache Hadoop完全分布式集群搭建-hadoop-最全最完整的保姆级的java大数据学习资料

文章目录1.4 Apache Hadoop 完全分布式集群搭建1.4.1 虚拟机环境准备1.4.2 集群规划1.4.3 安装Hadoop1.4.3.1 集群配置1.4.3.1.1 HDFS集群配置1.4.3.1.2 MapReduce集群配置1.4.3.1.3 Yarn集群配置1.4.3.2 分发配置1.4.4 启动集群1.4.4.1 单节点启动1.4.4.2 集群群起1.4.4.3 Had…

3D目标检测总结

3D目标检测最主要的应用领域是自动驾驶,主流用的传感器是camera和lidar, 一般车上也会配备很多radar, 但是在检测中一般很少用到radar。 除了特斯拉坚决不用lidar, 只基于纯视觉做自动驾驶感知, 大多数的自动驾驶感知…

Java---网络编程

特点:数据被限制在64kb以内,超出这个范围就不能发送了。 数据报(Datagram):网络传输的基本单位 。 TCP 传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收…

联邦学习论文分析1----联邦学习_功率分配_频带分配_传输速率_能耗

目录一、文章概述二、系统模型环境三、上行链路功率分配(UPA)算法1.系统目标2.约束条件3.公式推导(1)传输时间(2)系统能耗4.算法求解5.伪代码四、频带分配(BA)算法1.系统目标2.约束条件3.算法求解五、性能表征本文是对论文《Multi-Server Federated Edge Learning for Low Powe…

[附源码]JAVA毕业设计南京传媒学院门户网(系统+LW)

[附源码]JAVA毕业设计南京传媒学院门户网(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…

【计算机网络】数据链路层:虚拟局域网

以太网包含的计算机太多时,带来问题: (1)广播风暴 一个以太网是一个广播域(广播域中任何一台设备发出的广播通信都能被该部分网络中的其他所有设备所接收) 在交换机的交换表的建立过程中要使用许多广播域…

如何使用css美化网页?

转自:微点阅读 https://www.weidianyuedu.com 相信大家通过上一篇文章的学习已经成功的创建了自己的第一个网页。虽然只有一句话,但这个仍然是一个网页。但是我相信你,一定觉得这个页面不好看,想自己美化一下,今天就可…

深度学习---确保每次训练结果一致的方法

每次训练结果不一致的原因: 神经网络特意用随机性来保证,能通过有效学习得到问题的近似函数。采用随机性的原因是:用它的机器学习算法,要比不用它的效果更好。 在神经网络中,最常见的随机性包含以下几个地方&#xf…

[黑马程序员C++笔记]P174-P184模板-类模板

视频地址:黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目录 P174模板-类模板基本语法 P175模板-类模板和函数模板区别 P176模板-类模板中成员函数创建时机 P177模板-类模板对象做函数参数 P178模板-类模板与继承 P179模板-类模板…

什么是MES制造执行系统?MES的优势,架构和核心功能

随着科技的飞速发展,企业要想增强自身的竞争力,在市场竞争中立于不败之地,只有这样才是唯一的出路。在过去30年中,对社会影响最大的技术进步是信息技术,它改变了我们的日常生活,改变了企业的管理方式。在信…

Kubernetes v1.25 源码编译

下载源码并切换到需要debug的分支 git clone gitgithub.com:kubernetes/kubernetes.git git checkout -b v1.25 remotes/origin/release-1.25 cd kubernetes编译源码 执行:make clean && KUBE_BUILD_PLATFORMSlinux/amd64 make all DBG1会编译所有的组件 网…

java 之泛型详解

1 什么是泛型 引入: 关于泛型,先来说几句集合。都知道集合是可以存储任意对象,当我们创建一个集合时如果没有声明它的存储类型,那该集合便自动提升为Object类型 提示:在我们创建对象的时候,如果没有明确指…

构建全真互联数字地图底座 腾讯地图产业版WeMap重磅升级

前言 :伴随着地理信息产业的不断演进,以及LBS、大数据、5G、云、AI等新技术的持续应用,数实融合发展呈现出加速态势,数字地图也从移动互联网时代向产业互联网时代进化。 WeMap腾讯地图产业版重磅升级!12月1日&#xff…