ElasticSearch 笔记

By | 2022年3月11日

搜索

(1)相关性得分

Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度。也就是说你搜索”rock climbing”的话,只有”rock”的也可能被搜出来,只是相关性得分会很低,会排在后面点。例子:

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

返回结果有两条,第一条:”about”:”I love to go rock climbing“,第二条:”about”:”I like to collect rock albums“。

(2)短语搜索

找出一个属性中的独立单词是没有问题的,但有时候想要精确匹配一系列单词或者短语 。 比如, 我们想执行这样一个查询,仅匹配同时包含“rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。为此对 match 查询稍作调整,使用一个叫做 match_phrase 的查询:

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

毫无悬念,返回结果仅有 John Smith 的文档。

(3)分析

Elasticsearch 有一个功能叫聚合(aggregations),允许我们基于数据生成一些精细的分析结果。聚合与 SQL 中的 GROUP BY 类似但更强大。这里有个复杂案例:ElasticSearch 嵌套分桶的过滤与排序

集群状态

集群黄色状态解读:

bootstrap checks failed 错误解决

(1)max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解决办法:

第一步:切换到root用户,修改 /etc/security/limits.conf 添加如下内容:

     * soft nofile 65536
     * hard nofile 131072
     * soft nproc 4096
     * hard nproc 4096

第二步:切换到root用户,修改 /etc/security/limits.d/20-nproc.conf 添加如下内容:

     * soft nproc 1024
     #修改为
     * soft nproc 4096

(2)max number of threads [1024] for user [admin] is too low, increase to at least [4096]

解决办法和上面(1)一样。

(3) max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决办法:

切换到root用户,修改 /etc/sysctl.conf ,添加:vm.max_map_count=655360
并执行命令:sudo sysctl -p

注意:如果是 docker-compose 部署,改的是宿主主机。这个设置在安装前就应该先设置。

(4)system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决办法:

修改 elasticsearch.yml,添加:

 bootstrap.memory_lock: false
 bootstrap.system_call_filter: false

发表评论

您的电子邮箱地址不会被公开。