部分匹配(一)-前缀查询(Prefix Query)

场景:

  • 匹配邮政编码,产品序列号,或者其它以某个特定前缀开头的或者能够匹配通配符甚至正则表达式的not_analyzed值。
  • 即时搜索(Search-as-you-type) - 在用户完成搜索词条的输入前就展示最有可能的结果。
  • 匹配德语或者荷兰语这一类语言,它们韩哟长复合单词,比如Weltgesundheitsorganisation(World Health Organization)。

 

默认情况下,prefix查询不会计算相关度分值。它只是进行文档匹配,匹配的文档的分值为1。其实,相比查询它更像一个过滤器。prefix查询和prefix过滤器的唯一区别在于过滤器可以被缓存。

 

第一步:创建索引

假设我们将邮政编码索引为精确值的not_analyzed字段,因此我们可以创建如下索引(这一步不能少):

PUT /my_index1 { "mappings": { "address": { "properties": { "postcode": { "type": "string", "index": "not_analyzed" } } } } }

 

第二步:插入数据

PUT /my_index1/address/1

{ "postcode": "W1V 3DG" }

 

PUT /my_index1/address/2

{ "postcode": "W2F 8HW" }

 

PUT /my_index1/address/3

{ "postcode": "W1F 7HW" }

 

PUT /my_index1/address/4

{ "postcode": "WC1N 1LZ" }

 

PUT /my_index1/address/5

{ "postcode": "SW5 0BE" }

 

第三步:Prefix Query查询

查询以‘S’字母开头的postcode,注意,区分大小写

GET /my_index1/address/_search

{

"query": {

"prefix": {

"postcode": "S"

}

}

}

结果如图

 

在本章的稍后部分,我们会介绍一种让前缀匹配更具效率的索引期间解决方案。但是首先,让我们看看两个相关的查询:wildcard以及regexp查询。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值