Elasticsearch 学习踩坑之路—版本差异

1、版本问题

 Elasticsearch的最新版本已经到7.4.0,但很多人可能是像我一样的初学者,没有经历过版本的演化升级过程,因此也就不知道不同版本之间的变动和差异。

当我们开始实操的时候,大多也是跟着网上的一些资料进行学习,而这些资料很多都是基于某个版本的,而问题就在于初学者并不知道全貌,也不知道不同版本具体有哪些差异,我们通过零散的知识去构建索引,进行数据查询的时候就会遇到很多令人困惑的问题。

  • 复杂搜索 filtered-bool

权威指南上的例子

GET /megacorp/employee/_search
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 }
                }
            },
            "query" : {
                "match" : {
                    "last_name" : "smith" 
                }
            }
        }
    }
}

在elasticSearch客户端上执行时报错(我的Elasticsearch版本为6.8.1

错误如下:

{
  "error": {
    "root_cause": [
      {
        "type": "parsing_exception",
        "reason": "no [query] registered for [filtered]",
        "line": 3,
        "col": 22
      }
    ],
    "type": "parsing_exception",
    "reason": "no [query] registered for [filtered]",
    "line": 3,
    "col": 22
  },
  "status": 400
}

原因: no [query] registered for [filtered]   filtered过滤查询已被弃用,并在ES 5.0中删除。 
替代方案: 使用bool / filter/ must查询

GET /megacorp/employee/_search
{
    "query" : {
        "bool" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 }
                }
            },
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            }
        }
    }
}
  • 字段索引类型

在很多文章中看到类似下面的描述

 type: 指定字段类型, 如:textlongdoubledate.

 index: 指定字段索引的类型:

no: 不可被搜索

not_analyzed: 必须精确匹配,不分词

analyzed: 使用分析器建立倒排索引

在另一些文章中又会看到

index只有两个取值,分别是true或false,用来表示字段是否可以被搜索,而用"type" : "keyword"表示精确搜索,不为字段建立分词

产生困惑的原因就是觉得都是配置index,怎么有的文章是第一种写法,有的是第二种写法,而且代表的含义也不太相同。查阅资料后才知道,这是不同版本的写法,后者是5.0之后的写法。其他网友的举的栗子:

PUT /my_store  {"mappings" : {"products" : {"properties" : {"productID" : {"type" : "string","index" : "not_analyzed"}}}}}

但是这是es5.0以前的设置方法,在5.0以后,string类型的not_analyzed被keyword类型代替了,也就是说,设置方法如下:

PUT /my_store {"mappings" : {"products" : {"properties" : {"productID" : {"type" : "keyword"}}}}}

总结:对于初学者在不同的地方看到这些描述就会产生困惑,如果这些文章能够有基于的版本(尤其是针对版本升级后的文章)就更好了。但解决这种问题的根本方法还是要系统的学习并实践。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值