Mac安装6.1.2版本Elasticsearch及优化配置实践

1,Mac上安装(指定java8)

brew cask install java8

vim .base_profile
文件内容:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

source .base_profile
echo .base_profile
brew install elasticsearch

安装中文分词插件(根据当前es版本):
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.1.2/elasticsearch-analysis-ik-6.1.2.zip

2,优化配置

#服务器优化:更改索引片断数量
ulimit -n 32000 

#配置文集优化配置
自身配置文件:elasticsearch.yml
修改bootstrap.mlockall: true,禁止内存交换

jvm配置文件(GC):jvm.options
-Xms1g 初始分配内存 总内存的60%但不能超过32G
-Xmx1g 最大使用内存

mac中配置文件路径:
/usr/local/etc/elasticsearch

3,Elasticsearch索引配置

使用mappings新建index
curl -X PUT ‘localhost:9200/kline_test‘ -H ‘Content-Type: application/json‘ -d ‘
{
"settings": {
    "number_of_shards": 1,#分片数
    "number_of_replicas" :0#副本数:未批量导入数据时建议不要进行副本
},
  "mappings": {
    "kline_data": {
      "properties": {
        "code": {
          "type": "text", #数据类型
       "include_in_all": false #禁用_all查询
        },
        "name": {
          "type": "text",
       "include_in_all": false,#禁用_all查询
          "analyzer": "ik_max_word",#使用可以对文本进行最大数量的分词
          "search_analyzer": "ik_max_word"
        },
        "market": {
          "type": "byte",
       "include_in_all": false,#禁用_all查询
        },
        "time": {
          "type": "date" ,
       "include_in_all": false,#禁用_all查询
       "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",#指定数据的查询格式
        },
       "mongo_id": {
      "type": "text",
      "index": False #不对该字段进行索引,既无法作为查询条件
      }
      }
    }
  }
}‘ 

※特别提示:在6.1版本之后doc的字段属性:index的配置参数变更为True 或 False 而非之前的:not_analyzed和no

以下为各个字段的属性说明:(转自http://blog.csdn.net/ntc10095/article/details/73730772)

 "status": {
            "type":  "string", //字符串类型
            "index": True//是否被索引,True:索引既可查询 ,Flase:该字段将不可查询
            "analyzer":"ik"//指定分词器
            "boost":1.23//字段级别的分数加权
            "doc_values":false//对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存
            "fielddata":{"format":"disabled"}//针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value
            "fields":{"raw":{"type":"string","index":"not_analyzed"}} //可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词
            "ignore_above":100 //超过100个字符的文本,将会被忽略,不被索引
            "include_in_all":ture//设置是否此字段包含在_all字段中,默认是true,除非index设置成no选项
            "index_options":"docs"//4个可选参数docs(索引文档号) ,freqs(文档号+词频),positions(文档号+词频+位置,通常用来距离查询),offsets(文档号+词频+位置+偏移量,通常被使用在高亮字段)分词字段默认是position,其他的默认是docs
            "norms":{"enable":true,"loading":"lazy"}//分词字段默认配置,不分词字段:默认{"enable":false},存储长度因子和索引时boost,建议对需要参与评分字段使用 ,会额外增加内存消耗量
            "null_value":"NULL"//设置一些缺失字段的初始化值,只有string可以使用,分词字段的null值也会被分词
            "position_increament_gap":0//影响距离查询或近似查询,可以设置在多值字段的数据上火分词字段上,查询时可指定slop间隔,默认值是100
            "store":false//是否单独设置此字段的是否存储而从_source字段中分离,默认是false,只能搜索,不能获取值
            "search_analyzer":"ik"//设置搜索时的分词器,默认跟ananlyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能
            "similarity":"BM25"//默认是TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效
            "term_vector":"no"//默认不存储向量信息,支持参数yes(term存储),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量) 对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用
        }

  

4,谨慎分片

  当在ElasticSearch集群中配置好你的索引后, 在集群运行中你无法调整分片设置. 既便以后需要调整分片数量, 也只能新建并对数据进行重新索引(reindex)

  虽然reindex会比较耗时, 但至少能保证你不会停机

  每个分片都是有额外的成本的:

    • 每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源
    • 每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降
    • ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差

  分片数量的确定:

    原则:每个分片最好不超过30G,尽量不多过多分片

    计算数量:在确定之初最好能估算出日后数据的总量,然后再进行分片(例如:未来数据可能是300G,那就至少需要10-11个分片)

    ※为保证查询质量,建议还是分片数量不要过大;网上有的人说分片不能超过20有的不能超过100,而分片容量也有分歧:不能超过20G或30G

    ※个人认为需根据实际情况来进行优化,如果数据量再大且在增加额外的节点(ES会自动完成分片在不同节点上的分布平衡)后效率仍然没有改善,

     可新建另一个索引,然后通过程序中间件进行访问控制

    ※另外通过中间件可以进行特定数据存入指定分片(参数:_shards:0,1,2),从而达到特定数据的集中存储,提高查询效率

  节点数量确定(初期):

    节点数量<=分片数量*(副本数量+1)

5,使用optimize优化

  -随着时间的推移,ElasicSearch中每个shard的数据也会越来越多,索引越来越大,而生成的segment(在每个shard中,每个索引文件实际是由多个sgment文件组成)也会越来越多。

  而segment越多的话,则查询的性能越差,所以通过调用optimize命令,将多个segment合并成更少数量的segment(最少为一个),从而来提高查询性能。

    • curl -XPOST http://localhost:9200/shb01/_optimize?max_num_segments=1

  -在es中删除一个文档后不会立即从硬盘中删除只会标记这个文档被删除,lucene会产生一个.del文件,而在检索过程中这个文件还会参与检索只不过在最后会被过滤掉,

  这样其实也会影响效率,我们可以定期删除这些文件,同合并索引片断一样可以通过curl

原文地址:https://www.cnblogs.com/dxf813/p/8371376.html

时间: 2024-11-05 14:39:35

Mac安装6.1.2版本Elasticsearch及优化配置实践的相关文章

mysql 执行 cannot found mac安装mysql的两种方法(含配置)

mac安装mysql的两种方法(含配置 此时我们在命令行输入mysql -uroot -p命令会提示没有commod not found,我们还需要将mysql加入系统环境变量. (1).进入/usr/local/mysql/bin,查看此目录下是否有mysql,见pic6. (2).执行vim ~/.bash_profile 在该文件中添加mysql/bin的目录,见pic7: PATH=$PATH:/usr/local/mysql/bin 添加完成后,按esc,然后输入wq保存. 最后在命令

mac安装mysql的两种方法(含配置)

1.使用安装包安装mysql 双击打开安装文件 双击pkg文件安装 一路向下,记得保存最后弹出框中的密码(它是你mysql root账号的密码) 正常情况下,安装成功. 此时只是安装成功,但还需要额外的配置: (1) 进入系统偏好设置 (2) 点击mysql (3) 开启mysql服务 配置mysql系统环境变量 (1).进入/usr/local/mysql/bin,查看此目录下是否有mysql,见pic6. (2).执行vim ~/.bash_profile 在该文件中添加mysql/bin的

Mac安装多个Python版本

简介 利用Mac包管理工具brew安装pyenv,pyenv用来管理所有python版本.如果没有安装brew,先安装一下吧. 安装pyevn $ brew install pyenv $ pyenv -v pyenv 1.2.6 查看所有的python版本(pyenv管理的所有版本) $ pyenv versions * system (set by /Users/xxx/.pyenv/version) * 表示当前正在使用的版本,system表示用的是系统python版本 查看可安装pyth

mac安装nexus3.5.1版本

一.安装nexus 前置条件 :已经安装了JDK 1:下载nexus(http://www.sonatype.com/download-oss-sonatype) 最新版本(我的是3.5.1). 2:解压下载文件,我的放在了/Users/xxx/myApp下 3:配置环境变量: 打开/etc目录,在profile文件中加入:NEXUS_HOME="/Users/xxx/myApp/nexus-3.5.1-02-mac/nexus-3.5.1-02"; 保存,退出后.打开控制台键入nex

Java JDK的安装与JDK多版本快速切换的配置

原本想自己写一篇,结果在网上发现一篇写的特别好的博文,大家可以去原网址围观浏览加点赞, 只是搬运工+迷弟. 原文地址:https://blog.csdn.net/qq_38916130/article/details/81462128 原文地址:https://www.cnblogs.com/mww-NOTCOPY/p/11350410.html

Nginx 1.10.1 版本nginx.conf优化配置及详细注释

Nginx 1.10.1 的nginx.conf文件,是调优后的,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置#!异常配置 #运行用户 user nobody; #pid文件 pid logs/nginx.pid; #==worker进程数,通常设置等同于CPU数量,auto为自动检测 worker_processes auto; #==worker进程打开最大文件数,可CPU*10000设置 worker_rlimit_nofi

mac 通过pyenv 安装多个python版本

Mac安装多个Python版本 小琪的大爷关注 12018.07.30 11:18:51字数 332阅读 6,103 简介 利用Mac包管理工具brew安装pyenv,pyenv用来管理所有python版本.如果没有安装brew,先安装一下吧. 安装pyevn 查看所有的python版本(pyenv管理的所有版本) * 表示当前正在使用的版本,system表示用的是系统python版本 查看可安装python版本 选择版本进行安装 墙内环境,会卡在这里,可以开代理,或者使用国内镜像. 使用国内镜

mac下安装Python3.7(最新版本)

前言:mac系统自带python,不过以当前mac系统的最新版本为例,自带的python版本都是2.版本,虽然不影响老版本项目的运行,但是python最新的3.版本的一些语法与2.*版本并不相同,网上的教程大神们也肯定都更新出了最新版的教程,我们不论是学习还是使用,当然用最新版会更好一点. 1.在安装最新版Python3.*之前,我们先熟悉一下系统自带的python. Mac系统自带python路径为/System/Library/Frameworks/Python.framework/Vers

mac 安装nginx

1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ln -s  /usr/local/sbin/nginx /usr/bin/nginx 做个软连接.常用的指令有: nginx -V 查看版本,以及配置文件地址nginx -v 查看版本nginx -c filename 指定配置文件nginx -h 帮助 #重新加载配置|重启|停止|退出 ngi