elasticsearch-prefix 前缀查询优劣
来源:互联网 发布:淘宝外卖确认送达失败 编辑:程序博客网 时间:2024/05/21 17:00
假设将邮编作为 not_analyzed
的精确值字段索引,所以可以为其创建索引,如下:
PUT /my_index{ "mappings": { "address": { "properties": { "postcode": { "type": "string", "index": "not_analyzed" } } } }}
prefix 前缀查询
为了找到所有以 W1
开始的邮编,可以使用简单的 prefix
查询:
GET /my_index/address/_search{ "query": { "prefix": { "postcode": "W1" } }}
prefix
查询是一个词级别的底层的查询,它不会在搜索之前分析查询字符串,它假定传入前缀就正是要查找的前缀。
Tip
默认状态下, prefix
查询不做相关度评分计算,它只是将所有匹配的文档返回,并为每条结果赋予评分值 1
。它的行为更像是过滤器而不是查询。 prefix
查询和 prefix
过滤器这两者实际的区别就是过滤器是可以被缓存的,而查询不行。
之前已经提过:“只能在倒排索引中找到存在的词”,但我们并没有对这些邮编的索引进行特殊处理,每个邮编还是以它们精确值的方式存在于每个文档的索引中,那么 prefix
查询是如何工作的呢?
为了支持前缀匹配,查询会做以下事情:
扫描词列表并查找到第一个以
W1
开始的词。搜集关联的文档 ID 。
移动到下一个词。
如果这个词也是以
W1
开头,查询跳回到第二步再重复执行,直到下一个词不以W1
为止。
这对于小的例子当然可以正常工作,但是如果倒排索引中有数以百万的邮编都是以 W1
开头时,前缀查询则需要访问每个词然后计算结果!
前缀越短所需访问的词越多。如果我们要以 W
作为前缀而不是 W1
,那么就可能需要做千万次的匹配。
Caution
prefix
查询或过滤对于一些特定的匹配是有效的,但使用方式还是应当注意。当字段中词的集合很小时,可以放心使用,但是它的伸缩性并不好,会对我们的集群带来很多压力。可以使用较长的前缀来限制这种影响,减少需要访问的量。 0 0
- elasticsearch-prefix 前缀查询优劣
- Elasticsearch源码分析六--调用Lucene查询接口之前缀查询(Prefix)
- [Elasticsearch] 部分匹配 (一) - 前缀查询
- [Elasticsearch] 部分匹配 (一) - 前缀查询
- [Elasticsearch] 部分匹配 (一) - 前缀查询
- Trie(前缀树,prefix tree)
- USACO 最长前缀 Longest Prefix
- Trie (Prefix Tree) 前缀树
- 前缀列表ip prefix-list
- P1470 最长前缀 Longest Prefix
- elasticsearch-查询
- Elasticsearch查询
- Elasticsearch查询
- ElasticSearch查询
- Elasticsearch 查询
- USACO / Longest Prefix最长前缀(DP)
- 前缀表达式求值(Prefix expressions)
- USACO 2.3.1 Longest Prefix 最长前缀
- 手动删除Eclipse中SVN账号
- 一份不错的面试题
- 使用c#打印乘法表 打印金字塔
- ajax基本原理和使用
- Service的两种创建方式(startService和bindService)的使用
- elasticsearch-prefix 前缀查询优劣
- Win7 Python guiqwt 开发环境搭建
- 基于位置运动学的一些研究(四)
- 《OOP设计的6大原则》
- i386的页式内存管理机制(Linux源代码情景分析读书笔记)
- eclipse配置
- CloudStack4.9 安装文档
- 【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
- 最新博客地址