Elasticsearch 6.3.2版本踩填坑指南

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 前言  前端时间利用ES开发一个"附近地理位置+其它信息"查询搜索的功能(据了解,Redis和PostgreSQL也能实现同样的功能),实践中遇到了不少的问题,所以通过这篇文章记录下踩填坑过程。

前言

  前端时间利用ES开发一个"附近地理位置+其它信息"查询搜索的功能(据了解,Redis和PostgreSQL也能实现同样的功能),实践中遇到了不少的问题,所以通过这篇文章记录下踩填坑过程。

es with docker

  个人喜好,一般使用中间件都喜欢用Docker运行较新版本的,用docker pull elasticsearch命令拉下来的版本一般不会是最新的,所以可以从这里找到最新版本的拉取命令,稍加改造后我需要的是这样的:docker run --name elasticsearch -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.2

  注意到这里指定的镜像是elasticsearch-oss:6.3.2,这个-oss表示不包括X-Pack的ES镜像,这也是在6.0+版本后划分的,剩下两种类型是basic(默认)和platinum,具体官方说明可以看下图。

Elasticsearch Docker Image Types
Elasticsearch Docker Image Types

  如果启动失败,使用命令docker logs elasticsearch查看日志即可,-f参数用于监听,其中一种启动错误是要求你修改vm.max_map_count这个系统环境参数,Linux可参考命令sysctl -w vm.max_map_count=262144设置即可(其它系统在文末官方参考链接中有更详细介绍)。

create mapping

  这部分是重点,之前遇到的坑就是type mapping这块。

  1. "_id is not configurable"

  es2.0+版本中,_id是可以配置的,网上也有一堆告诉你怎么设置,但es6.3.2中创建mapping并指定_id配置的时候,es返回错误中就出现了上面那句,在社区可以找到了这个Discuss。高版本中的_id是不能配置了,一般来说,在添加Document的时候,如果只指定Index和Document Type,那么es会随机给这个_id分配一个值,但如果添加的时候指定这个_id值,那么ES就不会再随机分配这个值。不过注意,即使你指定的_id是一个数值,但在实际保存和返回中都是字符串类型;

  1. "Mapping with Index not_analyzed is not working"

  这个问题在Github上也有相关的Issues,我在这里先还原下当初创建mapping的配置:

{
    "properties": {
        # 当初的想法是指定shopId这个字段不要分析,然后keyword字段要进行分析
        "shopId": {
          "type": "integer",
          "index": "not_analyzed"
        },
        "location": {
          "type": "geo_point"
        },
        "keyword":{
          "type": "text",
          "index": "analyzed",
          "analyzer": "ik_max_word"
        }
    }
}

  创建完上述mapping后访问http://localhost:9200/{index}/{type}/_mapping,但返回结果(如下)和上面指定的mapping并不相同:

{
    "{index}": {
        "mappings": {
            "{type}": {
                "properties": {
                    "shopId": {
                        "type": "integer"
                    },
                    "location": {
                        "type": "geo_point"
                    },
                    "keyword": {
                        "type": "text",
                        "analyzer": "ik_max_word"
                    },
                }
            }
        }
    }
}

  之后还是在官方文档中找到答案,发现确实有两点值得记录一下。

  • 第一点:es5.0之后,为字符串新增了keyword类型,而之前的版本中只有text类型,通过index属性判断是否需要分词(默认分词)。es5.0之后使用keyword type代替index这个属性,所以指定"type": "text"就是分词,指定"type": "keyword"就是不分词;

  • 第二点:不需要为type为数字类型integer、long,日期类型date、布尔类型boolean等指定"index": "not_analyzed"属性(而且在高版本es中这也是错误的语法,index只能指定为"index": true | false,false意味着不可查询),因为这些类型就是不分词的,如果要分词请修改为text类型。

ik analysis

  IK是国内用得比较多的中文分词器,与ES安装集成也比较简单,首先进入dockerdocker exec -it elasticsearch bash,然后用命令./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.2/elasticsearch-analysis-ik-6.3.2.zip安装即可(需对应es版本),安装完使用docker restart elasticsearch重启服务即可。IK支持两种分词方式,ik_smartik_max_word,前者分词粒度没有后者细,可以针对实际情况进行选择。

head plugin

  elasticsearch-head插件也是测试的时候用得比较多的插件,以前用ES2的时候是借助plugin脚本安装的,但这种方式在ES5.0之后被废弃了,然后作者也推荐了好几种方式,可以借助npm运行该服务,或者用docker运行服务,不过为了简单起见我最后选的是Chrome extension这种方式。

参考链接

Install Elasticsearch with Docker
Mapping
Text datatype
Keyword datatype
how-to-not-analyze-in-elasticsearch
elasticsearch-analysis-ik
elasticsearch-head

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
API 网络安全 网络架构
浅谈Elastic Search V8版本的一些重大改进
浅谈Elastic Search V8版本的一些重大改进
36 0
|
数据安全/隐私保护 Docker 容器
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
957 0
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
|
4月前
|
Java API Maven
springboot 、spring-data-elasticsearch、elasticserach的版本对应关系
springboot 、spring-data-elasticsearch、elasticserach的版本对应关系
331 0
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
国内首家!阿里云 Elasticsearch 8.9 版本释放 AI 搜索新动能
阿里云作为国内首家上线 Elasticsearch 8.9版本的厂商,在提供 Elasticsearch Relevance Engine™ (ESRE™) 引擎的基础上,提供增强 AI 的最佳实践与 ES 本身的混合搜索能力,为用户带来了更多创新和探索的可能性。
1424 1
|
11月前
|
域名解析 开发工具
elasticsearch 8.3版本安装和集群部署
elasticsearch 8.3版本安装和集群部署
347 1
|
运维 分布式计算 Hadoop
【大数据开发运维解决方案】Elasticsearch+Logstash+Kibana(6.7.1版本)安装部署
Elasticsearch+Logstash+Kibana(6.7.1版本)安装部署 目前Elasticsearch、Logstash、Kibana三个组件都准备安装在虚拟机供个人学习使用。 一、部署Elasticsearch 1、下载安装包 官网下载地址: ES下载官网 选择Elasticsearch组件 2、上传解压安装包 [root@s133061 elk]# pwd /hadoop/elk [root@s133061 elk]# ls elasticsearch-6.7.1.tar.gz kiba
【大数据开发运维解决方案】Elasticsearch+Logstash+Kibana(6.7.1版本)安装部署
|
域名解析 Kubernetes 负载均衡
使用Kubernetes Stateful Set有状态类型搭建Elasticsearch7.x版本高可用三节点集群
使用Kubernetes Stateful Set有状态类型搭建Elasticsearch7.x版本高可用三节点集群
388 0
使用Kubernetes Stateful Set有状态类型搭建Elasticsearch7.x版本高可用三节点集群
|
数据库 索引
新年第一天,老板让升级ElasticSearch版本,我说得加钱
新年第一天,老板让升级ElasticSearch版本,我说得加钱
新年第一天,老板让升级ElasticSearch版本,我说得加钱
Windows、Mac系统 Elasticsearch离线文档(支持选择版本)安装部署教程
此文档是针对当前最新版本,或指定版本安装教程 如需下载 Elastic认证考试特定版本,请戳: Elasticsearch离线文档安装部署教程(Elastic认证考试版) 鉴于备考环境需要经常访问官方文档,而官方访问速度齁慢齁慢。特此给出官方文档离线版食谱,各位客官细细品尝。
Windows、Mac系统 Elasticsearch离线文档(支持选择版本)安装部署教程
|
消息中间件 存储 监控
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作
290 0
SpringBoot集成ElasticSearch 7.6【新版本】及安装使用操作

热门文章

最新文章