[Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索
本章翻译自Elasticsearch官方指南的Partial Matching一章。
查询期间的即时搜索(Query-time Search-as-you-type)
如今让我们来看看前缀匹配可以怎样帮助全文搜索。
用户已经习惯于在完毕输入之前就看到搜索结果了 - 这被称为即时搜索(Instant Search, 或者Search-as-you-type)。这不仅让用户可以在更短的时间内看到搜索结果。也可以引导他们得到真实存在于我们的索引中的结果。
比方。假设用户输入了johnnie walker bl,我们会在用户输入完毕前显示Johnnie Walker Black Label和Johnnie Walker Blue Label相关的结果。
和往常一样,有多种方式可以达到我们的目的。首先我们从最简单的方式開始。你不须要以不论什么的方式准备你的数据,就行在不论什么全文字段(Full-text Field)上实现即时搜索。
在短语匹配(Phrase Matching)中。我们介绍了match_phrase查询,它可以依据单词顺序来匹配全部的指定的单词。对于查询期间的即时搜索,我们可以使用该查询的一个特例,即match_phrase_prefix查询:
{"match_phrase_prefix" : {"brand" : "johnnie walker bl"} }
次查询和match_phrase查询的工作方式基本同样。除了它会将查询字符串中的最后一个单词当做一个前缀。换言之,前面的样例会查找下面内容:
- johnnie
- 紧接着的是walker
- 紧接着的是以bl开头的单词
假设我们将该查询通过validate-query API运行,它会产生例如以下的解释:
"johnnie walker bl*"
和match_phrase查询一样。它可以接受一个slop參数(參见这里)来让单词间的顺序和相对位置不那么严格:
{"match_phrase_prefix" : {"brand" : {"query": "walker johnnie bl", "slop": 10}} }
可是,查询字符串中的最后一个单词总是会被当做一个前缀。
在之前介绍prefix查询的时候,我们谈到了prefix查询的一些须要注意的地方 - prefix查询时怎样消耗资源的。在使用match_phrase_prefix查询的时候,也面临着相同的问题。一个前缀a你可以匹配很许多的词条。匹配这么多的词条不仅会消耗许多资源,同一时候对于用户而言也是没有多少用处的。
我们能够通过将參数max_expansions设置成一个合理的数值来限制前缀扩展(Prefix Expansion)的影响,比方50:
{"match_phrase_prefix" : {"brand" : {"query": "johnnie walker bl","max_expansions": 50}} }
max_expansions參数会控制可以匹配该前缀的词条的数量。它会找到首个以bl开头的词条然后開始收集(以字母表顺序)直到全部以bl开头的词条都被遍历了或者得到了比max_expansions很多其它的词条。
不要忘了在用户每敲入一个字符的时候。该查询就要被运行一次。因此它的速度须要快。假设第一个结果集不符合用户的期望,那么他们就会继续输入直到得到他们须要的结果。
转载于:https://www.cnblogs.com/yxwkf/p/5247811.html
[Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索相关推荐
- [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles
提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重 ...
- 跟乐乐学ES!(三)ElasticSearch 批量操作与高级查询
上一篇文章:跟乐乐学ES!(二)ElasticSearch基础. 下一篇文章:跟乐乐学ES!(四) java中ElasticSearch客户端的使用. 批量操作 有些增删改查操作是可以进行批量操作的, ...
- Elasticsearch 字段可以模糊查询也可完全匹配查询(实例)
需求: 比如创建用户, 需要判断name是否重复后, 没有重复才插入数据, 创建好之后又需要模糊查询用户昵称name. 这时候name字段类型就需要具备分词并且可完全匹配搜索. 直接上代码: 创建映 ...
- 初识ElasticSearch(2) -文档查询之match查询 | 分词器
1. 分词器: 2. match查询: 2.1. 数据准备 - 创建带分词器的索引映射 2.2. 数据准备 - 添加文档 2.3. 数据准备 - 查看文本分词 2.4. 查询 - 映射有分词器的字段查 ...
- 数据库-Elasticsearch进阶学习笔记(分片、映射、分词器、即时搜索、全文搜索等)
目录 基础概念 定义 特点 索引(Index) 分片(Shards) 副本(Replicas) 分配(Allocation) 映射(Mapping) 动态映射 显式映射 常见数据类型 文档(docum ...
- Elasticsearch(es) 查询语句语法详解
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...
- ElasticSearch使用(嵌套查询、嵌套高亮)
ElasticSearch使用(嵌套查询.嵌套高亮) 嵌套查询 bool 查询 must.should关系 1.只有must 2.只有should 3.must和should同时存在 4.怎样设置sh ...
- ElasticsearchTemplate的详细使用,完成多条件查询、匹配度查询 . . .
ElasticsearchTemplate是Spring对ES的java api进行的封装,提供了大量的相关的类来完成各种各样的查询.在日常的使用中,应该说最常用的查询就是queryList方法. p ...
- Elasticsearch中的Term查询和全文查询
Elasticsearch中的Term查询和全文查询 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 ...
最新文章
- java泛型集合_Java泛型集合(Set)
- Java 开发人员 2019 生态系统信息图
- mysql做前端_MySQL 还可以这样做
- FreeSql接入CAP的实践
- Linux c之函数手册
- Linux 打印简单日志(一)
- ListView排序并隔色显示
- 吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院
- (转)Spring的三种实例化Bean的方式
- 恒大和小米双双否认外界谣言,此前有人宣称小米将接手恒大造车
- MySQL自动化审核平台部署说明
- android模拟器快捷键,Android模拟器快捷键大全
- 测量图上点位平面位置\高程中误差怎么计算?
- chrome最简单的多开方法
- tp6多表联合查询的几种方式(模糊搜索+分页+字段限制)
- 侯捷 C++ 课程系列视频 | 侯捷 STL 视频
- 顶尖文案app_17个文案网站 5款短视频软件,自媒体人必备,直接拿走不谢
- 软件测试知识点合集总结
- JMeter 接口测试-if控制器
- php sequelize,关于javascript:eggjs-sequelize-的常用方法总结
热门文章
- matlan数据分析库函数
- C语言与C++ 中bool关键字的矛盾解决
- 解决socket粘包的两种low版模式 os.popen()和struct模块
- Luffy之Xadmin以及首页搭建(轮播图,导航)
- jquery的html代码中a的onclick的正确显示的代码
- Spring入门第一例
- Java联网技术之一HTTP
- [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?
- Runtime.getRuntime().exec(...)使用方法
- 上传大数据到SharePoint 2010