本章翻译自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] 部分匹配 (三) - 查询期间的即时搜索相关推荐

  1. [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles

    提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重 ...

  2. 跟乐乐学ES!(三)ElasticSearch 批量操作与高级查询

    上一篇文章:跟乐乐学ES!(二)ElasticSearch基础. 下一篇文章:跟乐乐学ES!(四) java中ElasticSearch客户端的使用. 批量操作 有些增删改查操作是可以进行批量操作的, ...

  3. Elasticsearch 字段可以模糊查询也可完全匹配查询(实例)

    需求: 比如创建用户, 需要判断name是否重复后, 没有重复才插入数据, 创建好之后又需要模糊查询用户昵称name.  这时候name字段类型就需要具备分词并且可完全匹配搜索. 直接上代码: 创建映 ...

  4. 初识ElasticSearch(2) -文档查询之match查询 | 分词器

    1. 分词器: 2. match查询: 2.1. 数据准备 - 创建带分词器的索引映射 2.2. 数据准备 - 添加文档 2.3. 数据准备 - 查看文本分词 2.4. 查询 - 映射有分词器的字段查 ...

  5. 数据库-Elasticsearch进阶学习笔记(分片、映射、分词器、即时搜索、全文搜索等)

    目录 基础概念 定义 特点 索引(Index) 分片(Shards) 副本(Replicas) 分配(Allocation) 映射(Mapping) 动态映射 显式映射 常见数据类型 文档(docum ...

  6. Elasticsearch(es) 查询语句语法详解

    Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...

  7. ElasticSearch使用(嵌套查询、嵌套高亮)

    ElasticSearch使用(嵌套查询.嵌套高亮) 嵌套查询 bool 查询 must.should关系 1.只有must 2.只有should 3.must和should同时存在 4.怎样设置sh ...

  8. ElasticsearchTemplate的详细使用,完成多条件查询、匹配度查询 . . .

    ElasticsearchTemplate是Spring对ES的java api进行的封装,提供了大量的相关的类来完成各种各样的查询.在日常的使用中,应该说最常用的查询就是queryList方法. p ...

  9. Elasticsearch中的Term查询和全文查询

    Elasticsearch中的Term查询和全文查询 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 ...

最新文章

  1. java泛型集合_Java泛型集合(Set)
  2. Java 开发人员 2019 生态系统信息图
  3. mysql做前端_MySQL 还可以这样做
  4. FreeSql接入CAP的实践
  5. Linux c之函数手册
  6. Linux 打印简单日志(一)
  7. ListView排序并隔色显示
  8. 吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院
  9. (转)Spring的三种实例化Bean的方式
  10. 恒大和小米双双否认外界谣言,此前有人宣称小米将接手恒大造车
  11. MySQL自动化审核平台部署说明
  12. android模拟器快捷键,Android模拟器快捷键大全
  13. 测量图上点位平面位置\高程中误差怎么计算?
  14. chrome最简单的多开方法
  15. tp6多表联合查询的几种方式(模糊搜索+分页+字段限制)
  16. 侯捷 C++ 课程系列视频 | 侯捷 STL 视频
  17. 顶尖文案app_17个文案网站 5款短视频软件,自媒体人必备,直接拿走不谢
  18. 软件测试知识点合集总结
  19. JMeter 接口测试-if控制器
  20. php sequelize,关于javascript:eggjs-sequelize-的常用方法总结

热门文章

  1. matlan数据分析库函数
  2. C语言与C++ 中bool关键字的矛盾解决
  3. 解决socket粘包的两种low版模式 os.popen()和struct模块
  4. Luffy之Xadmin以及首页搭建(轮播图,导航)
  5. jquery的html代码中a的onclick的正确显示的代码
  6. Spring入门第一例
  7. Java联网技术之一HTTP
  8. [No000018]都在背单词,为啥学霸那么厉害-如何在一天内记200个单词?
  9. Runtime.getRuntime().exec(...)使用方法
  10. 上传大数据到SharePoint 2010