小白学ES 21 - Elasticsearch中term+prefix+wildcard+fuzzy+boost等的用法 - 代码先锋网


本站和网页 https://www.codeleading.com/article/8300315525/#5__boost___76 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

小白学ES 21 - Elasticsearch中term+prefix+wildcard+fuzzy+boost等的用法 - 代码先锋网
代码先锋网 代码片段及技术文章聚合
首页
联系我们
版权申明
隐私政策
首页
联系我们
版权申明
隐私政策
小白学ES 21 - Elasticsearch中term+prefix+wildcard+fuzzy+boost等的用法
技术标签: term查询 prefix查询 wildcard查询 boost提升分值
文章目录1 前缀搜索 - prefix2 通配符搜索 - wildcard3 正则搜索 - regexp4 纠错查询 - fuzzy5 boost提升分值 - 控制文档的优先级别6 dis_max的用法 - best fields策略7 exist query(过期)8 DSL的复杂查询示例8.1 多条件拼接 - 匹配+范围+排序8.2 多条件过滤 - 包含8.3 定制搜索结果的排序规则8.3.1 默认排序规则8.3.2 定制排序规则版权声明
1 前缀搜索 - prefix
prefix query, 就是前缀搜索. 比如商品name中有多个以"Java"开头的document, 搜索前缀"Java"时就能搜索到所有以"Java"开头的文档.
—— 扫描所有倒排索引, 性能较差.
GET shop/_search
"query": {
"prefix": { "name": "java" }
2 通配符搜索 - wildcard
扫描所有倒排索引, 性能较差.
GET shop/_search
"query": {
"wildcard": { "name": "ja*" }
3 正则搜索 - regexp
扫描所有倒排索引, 性能较差.
GET shop/_search
"query": {
"regexp": { "name": "jav[a-z]*" }
4 纠错查询 - fuzzy
fuzziness的默认值是2 —— 表示最多可以纠错两次.
fuzziness的值太大, 将削弱查询串的作用, 也就是说, 纠错太多, 导致限定查询结果的串被改变, 失去了限定作用.
示例: 查询name中包含"Java"的文档, Java中缺失了一个字母a:
GET shop/_search
"query": {
"match": {
"name": {
"query": "Jav",
"fuzziness": 1,
"operator": "and"
5 boost提升分值 - 控制文档的优先级别
通过boost参数, 令满足某个条件的文档的得分更高, 从而使得其排名更靠前.
GET shop/_search
"query": {
"bool": {
"must": [
{ "match": { "name": "编程思想"} }
],
"should": [
"match": {
"name": {
"query": "艺术",
"boost": 2// 提升得分
6 dis_max的用法 - best fields策略
一般查询中, 查询串会被分词, bool查询构建多个子查询 (must | must_not | should | filter), 这些子查询可能会包含多个field. 这时:
多个子查询的field各匹配少量关键字的文档的分数 > 某个子查询的field匹配大量关键字的文档的分数.
dis_max的提出:
如果我们希望查询结果中 (查询串被分词后的) 关键字匹配越多, 这样的文档就越靠前, 而不是多个子查询中匹配少量分词的文档靠前.
⇒ 此时可以使用dis_max和tie_breaker.
tie_breaker的值介于0~1之间, Elasticsearch将 bool查询的分数 * tie_breaker的结果与dis_max的最高分进行比较, 除了取dis_max的最高分以外, 还会考虑其他的查询结果的分数.
使用:
为了增加精准度, 常用的是配合boost、minimum_should_match等参数控制查询结果.
使用示例:
GET shop/_search
"query": {
"dis_max": {
"queries": [
{ "match": { "name": "虚拟机" } },
{ "match": { "desc": "经典" } }
],
"tie_breaker": 0.2// 对同时满足的文档的分值进行提升
GET shop/_search
"query": {
"dis_max": {
"queries": [
"match": {
"name": {
"query": "虚拟机",
"minimum_should_match": "50%",
"boost": 2
},
"match": {
"desc": {
"query": "经典",
"minimum_should_match": "50%",
"boost": 3
],
"tie_breaker": 0.3
7 exist query(过期)
这是Elasticsearch 2.x中的API, 后续版本不再支持.
8 DSL的复杂查询示例
8.1 多条件拼接 - 匹配+范围+排序
匹配查询: name中包含"java"却不包含"虚拟机";
范围查询: 价格大于50、小于80;
结果排序: 按照价格升序排序.
GET shop/_search
"query": {
"bool": {
"must": {// 必须匹配
"match": { "name": "java" }
},
"must_not": {// 必须不匹配
"match": { "name": "虚拟机" }
},
"filter": {
"range": {
"price": {
"gte": 40,
"lte": 80,
"boost": 2.0// 设置得分的权重值(提升值), 默认是1.0
关于范围查询的使用, 请参考博客: 小白学ES 22 - ES的范围查询 + 日期范围查询(Range Query)
8.2 多条件过滤 - 包含
查询出版时间在2012-07之后, 且至少满足下述条件中一个的文档:
a. 名称(name)中包含"并发";
b. 描述(desc)中包含"java";
c. 出版社(publisher)名称中不包含"电子".
GET shop/_search
"query": {
"bool": {
"filter": {// 按时间过滤
"range": {
"date": {
"gte": "2012-07"
},
"should": [// 可匹配, 可不匹配
"match": { "name": "并发" }
},
"bool": {
"must": {// 必须匹配
"match": { "desc": "java" }
},
"must_not": {// 不能匹配
"match": { "publisher": "电子" }
],
"minimum_should_match": 1// 至少满足should中的一个条件
},
// 自定义排序
"sort": [
{ "price": { "order": "desc" } }
注意: 排序的字段最好是数字, 或日期, 因为字符串字段会被分词, ES会通过分词后的某个词去排序, 结果难以预测.
8.3 定制搜索结果的排序规则
8.3.1 默认排序规则
ES默认是按查询结果的分值(_score)降序排列的.
某些情况下, 可能存在无实际意义的_score, 比如filter时所有_score的值都相同:
GET website/_search
"query": {
"bool": {
"filter": {
"term": {
"author_id": 5520// 此时所有符合条件的_score都为0
// 或通过constant_score过滤:
GET website/_search
"query": {
"constant_score": {
"filter": {
"term": {
"author_id": 5520// 此时所有符合条件的_score都为1
8.3.2 定制排序规则
GET website/_search
"query": {
"constant_score": {
"filter": {
"term": {
"author_id": 5520
},
"sort": [
"post_date": { "order": "asc" }
版权声明
作者: ma_shoufeng(马瘦风)
出处: CSDN 马瘦风的博客
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.
版权声明:本文为ma_shou_feng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ma_shou_feng/article/details/86357396
智能推荐
Centos7安装Redis5.0.4,后台启动
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 如果wget命令和vim命令不能用可用下面语句安装。 二、下载并解压安装包 三、cd切换到redis解压目录下,执行编译 四、安装并指定安装目录 五、启动服务 5.1前台启动(不推荐使用) [[email protected] redis-5.0.4]# ...
点云滤波——直通滤波
最简单的例子:按高度筛选点云...
假期使用Object-C制作了一个骰子游戏
首先蜜蜂祝大家狗年一帆风顺,因年底比较空闲,自己琢磨了一个骰子游戏 github地址 项目使用了Cocoapods,又设置了忽略文件,所以下载的时候请自行 pod install 一下 项目主要利用CATransform3DRotate改变view的perspective来实现骰子的3D旋转功能,再进行随机数来达到摇骰子的功能 因为使用了毛玻璃,所以在模拟器的情况下会崩溃,建议真机运行,或者将毛玻...
2020前端JavaScript面试题精选(不断更新)
1 .介绍JavaScript的基本数据类型 Number、String 、Boolean 、Null、Undefined Object 是 JavaScript 中所有对象的父对象 数据封装类对象:Object、Array、Boolean、Number 和 String 其他对象:Function、Arguments、Math、Date、RegExp、Error 新类型:Symbol 2.eva...
幂运算
1、整数的快速幂 a^b%m当b还不是很大的时候 (a%m)……%m 但是a,b太大可能存不下,所以这里介绍一种利用二分的思想 2、把指数b表示成相应的二进制形式 是0的位不给予考虑, 另外一种是递归的方法 ...
猜你喜欢
File
java.io.File 分隔符 static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 static char pathSeparatorChar 与系统有关的路径分隔符。 pathSeparator与pathSeparatorChar 的内容其实一样,不过前一个返回的是字符串(字符前多了个空格),后者返回的就是个字符 路径分隔符wind...
将两个从小到大排列好的数组再次排序于新数组中
...
[leetcode]791. Custom Sort String
[leetcode]791. Custom Sort String Analysis 周五ummmmmm—— [啊啊啊啊 paper结果要出来了,心塞] S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sorted in some ...
让应用程序执行我们的代码?
伊始   当我们目标应用程序由于需要使用外部其他应用程序指定,启动一些函数,比如计算空间使用大小,显示当前空间内成员使用率时,开关打印日志时,需要手动触发计算时,可以利用这个方案。 主体 一切都是为了需求而做,而我们需要的就是落地!。 那我们开始吧!   首先,我们要有一个要API函数,我们要以此函数作为接口,实现我们的需求。这里我们就以最简单Message...
[1]、两数之和
题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例1: 解法 第一种解法通过暴力,固定i,移动j扫描一遍数组,每次判断是否条件nums[i]+nums[j] == target,如果满足则保存,然后再i+1固定,j从头到尾再扫描一...
相关文章
小白学ES 07 - Elasticsearch的多种查询方式
小白学ES 24 - Elasticsearch的聚合分析
小白学ES 27 - Elasticsearch脚本的使用实践
【小白学PyTorch】21 Keras的API详解(上)卷积、**、初始化、正则
【小白学PyTorch】21 Keras的API详解(下)池化、Normalization层
ES 21 - Elasticsearch的高级检索语法 (包括term、prefix、wildcard、fuzzy、boost等)
小白学ES 22 - Elasticsearch中如何进行日期+数值范围查询
小白学ES 19 - Elasticsearch的检索API的使用(_search和URI Search)
小白学ES 08 - 对Elasticsearch的索引进行CRUD操作
小白学ES 11 - 什么是Elasticsearch的映射(mapping) + 如何配置映射
热门文章
update5 动态绑定,Foundation内主要封装类以及UIKit部分类杂记
Flex支持滑轮滚动
php5.6 install
3. 无重复字符的最长子串
C++ 语言访问控制 - 友元 (friend)
整数分解为若干项之和
js获取行内以及非行内样式
Linux springboot项目 每天生产一个日志文件,如何配置?
hdu2588 GCD(欧拉函数)
vantui一个输入框验证两个条件
推荐文章
PTA (jmu-Java-02基本语法-08-ArrayList入门)
Kafka 0.9 新消费者API
Django框架(二):路由层
Kotlin学习(七):函数
Bzoj3211: 花神游历各国
el-select数据过多懒加载(loadmore)
16.Spark大型电商项目-用户访问session分析-Idea工程搭建以及工具类说明_
2019-填空题[年号字串]
Python - strings
JAVA处理日期(Date)时间(Time)以及相关类的介绍
相关标签
Elasticsearch
ES的查询方式
聚合分析
聚合查询
嵌套聚合
脚本
script
Script Field
PyTorch 从零学习深度网络
人工智能
2018-2022 All rights reserved by codeleading.com