博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch学习---Term query和Match query
阅读量:2492 次
发布时间:2019-05-11

本文共 1857 字,大约阅读时间需要 6 分钟。

前言

在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明。

数据准备

建立一个索引,指定mapping结构,其中name是keyword类型,full_name是text类型。

PUT /my-index-01{
"mappings": {
"properties": {
"name":{
"type": "keyword" }, "full_name":{
"type": "text" } } }}

插入一条文档数据。

PUT /my-index-01/_doc/1{
"name":"zhang", "full_name":"zhang san"}

查询测试

使用match进行如下查询,可以查到结果

GET /my-index-01/_search{
"query": {
"match": {
"full_name": "zhang san" } }}

在这里插入图片描述

而如果换成term查询,则查不到

GET /my-index-01/_search{
"query": {
"term": {
"full_name": {
"value": "zhang san" } } }}

在这里插入图片描述

如果换成只查zhang或者san,则两者都可以查到

GET /my-index-01/_search{
"query": {
"match": {
"full_name": "zhang" } }}GET /my-index-01/_search{
"query": {
"term": {
"full_name": {
"value": "zhang" } } }}

同样如果换成查询name字段,则两者也都可以查到

GET /my-index-01/_search{
"query": {
"match": {
"name": "zhang" } }}GET /my-index-01/_search{
"query": {
"term": {
"name": {
"value": "zhang" } } }}

Term query

返回字段中包含确切 term 的文档,你可以通过term查询来进行精确匹配。

官方,建议不要对text类型的字段进行term查询,因为默认情况下text类型的字段会被进行分词,这样就让使用term查询变得困难,推荐对text字段进出查询,使用match query。

可以看出term query在查询时并不会进行分词,所以在上面案例中,由于标准分词器会对full_name字段进行分词,zhang san会被分成zhang和san。

查看在standard分词器下,zhang san的分词结果

POST _analyze{
"analyzer": "standard", "text": "zhang san"}

在这里插入图片描述

因此当你通过term查询zhang或者san时,可以查询到数据,因为词项表中能找到对应的内容,而如果通过zhang san进行查询时,则查不到内容,因为zhang san并没有在词项表中。

Match query

match query是对查询内容进行分词,然后使用全文搜索的标准查询,所以很明显,如果你输入zhang san进行查询,会对zhang和san两个词项分别进行匹配,只要有一个匹配到了,就会返回其结果。

总结

term query:会直接按照查询内容进行精确匹配,如果分词表中能查到对应的结果则返回。

match query:会对查询的内容先进行分词,然后按照分词的结果与分词表进行匹配,只要有一个匹配到就算匹配成功。
可以这样理解,以分词为查询单位来看,term是精确匹配,而match是模糊匹配。

转载地址:http://ielrb.baihongyu.com/

你可能感兴趣的文章
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
对于模拟交易所引发的思考
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>