[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很多其它的词条。
不要忘了在用户每敲入一个字符的时候。该查询就要被运行一次。因此它的速度须要快。假设第一个结果集不符合用户的期望,那么他们就会继续输入直到得到他们须要的结果。
[Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索的更多相关文章
- [Elasticsearch] 部分匹配 (四) - 索引期间优化ngrams及索引期间的即时搜索
本章翻译自Elasticsearch官方指南的Partial Matching一章. 索引期间的优化(Index-time Optimizations) 眼下我们讨论的全部方案都是在查询期间的.它们不 ...
- [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles
提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询仅仅是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则须要计算和比較多个可能 ...
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- [Elasticsearch] 部分匹配 (一) - 前缀查询
部分匹配(Partial Matching) 敏锐的读者可能已经发现到眼下为止,介绍的查询都是在整个词条层面进行操作的. 匹配的最小单元必须是一个词条.你仅仅能找到存在于倒排索引(Inverted I ...
- ElasticSearch(6)-结构化查询
引用:ElasticSearch权威指南 一.请求体查询 请求体查询 简单查询语句(lite)是一种有效的命令行_adhoc_查询.但是,如果你想要善用搜索,你必须使用请求体查询(request bo ...
- ElasticSearch查询 第一篇:搜索API
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- ElasticSearch入门 第三篇:索引
这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- elasticsearch组合多条件查询实现restful api以及java代码实现
原文:http://blog.java1234.com/blog/articles/372.html elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中 ...
- Elasticsearch入门教程(三):Elasticsearch索引&映射
原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...
随机推荐
- oracle之case when
oracle case when 的用法 http://www.cnblogs.com/xiaowu/archive/2011/08/17/2143445.html(转) http://www.cnb ...
- AngularJs练习Demo7
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- Js得到radiobuttonlist选中值,设置默认值
JS 代码 var vRbtid=document.getElementById("rbtid"); //得到所有radio var vRbtidList= v ...
- iOS_SN_Socket - AsyncSocket
转载文章,原地址:http://yimouleng.com/2015/02/04/Socket-AsyncSocket/ 一.前言 公司的项目用到了Socket编程,之前在学习的过程当中,用到的更多的 ...
- OD调试4--去除NAG窗口
OD调试4--去除NAG窗口 nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口.软件设计者可能认为当用户忍受不了试用版中的这些烦人的窗口时,就会考虑购买正式版本. 一 ...
- hdu 1232畅通工程
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...
- IntelliJ IDEA14如何配置tomcat
http://doc.okbase.net/frank1234/archive/121479.html
- 【JAVA编码专题】UNICODE,GBK,UTF-8区别
简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与g ...
- javascript操作DOM的方法与属性
文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构. 将HTML代码分解为DOM节点层次图: ...
- lnmp安装fileinfo扩展
1.错误: PHP Fileinfo extension must be installed/enabled to use Intervention Image. 2.原因: 缺少 fileinfo扩 ...