ubuntu虚机安装es
1. 下载并解压
es安装包下载地址:https://mirrors.huaweicloud.com/elasticsearch/7.9.3/
kibana包下载地址:https://mirrors.huaweicloud.com/kibana/
下载得到 elasticsearch-7.9.3-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local
mv elasticsearch-7.9.3/ elasticsearch
2. 创建用户并设置文件夹权限
由于Elasticsearch不能以root用户身份允许,需要创建一个新用户,并将Elasticsearch文件夹的所有权改为该用户。
sudo useradd -m elasticsearch
sudo chown -R elasticsearch:elasticsearch /usr/local/elasticsearch
3. 解决系统限制
Elasticsearch可能需要调整系统级别的限制,如文件描述符数量和内存映射区域大小。
比如要解决下面报错
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
需要编辑 /etc/sysctl.conf文件,在最后增加一行
vm.max_map_count=262144
保存文件后,运行以下命令来应用更改:
sudo sysctl -p
4. 修改配置文件
比如要解决下面报错
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
需要修改的配置如下:
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["127.0.0.1"]
5. 启动
cd /usr/local/elasticsearch/bin
./elasticsearch -d
6. 验证
curl http://127.0.0.1:9200
文档翻译 Query DSL
官方文档 Query DSL | Elasticsearch Guide [8.15] | Elastic
Elasticsearch 提供了一个基于JSON的全量Query DSL来定义查询语句。可以把 Query DSL看作是一个AST,即一个关于查询的抽象语法树,由两个类型的子句组成:
Leaf query clauses
叶子查询子句,是通过指定的字段来查询特定值,比如 mathc、term、range,这些查询可以单独使用。
Compound query clauses
组合查询子句,他们包含其他叶子查询子句 或者 组合查询子句,可以在逻辑上形成组合的查询(比如 bool、dis_max查询),可能改变他们的行为(比如 constant_score查询)。
Allow expensive queries
一些类型的查询因为实现方式的原因会执行很慢,这还会影响集群的稳定性。这下查询如下:
- 查询需要执行线性扫描来鉴别匹配:
- 脚本查询 script query
- 对于没有索引的但是doc values打开的如下类型字段,numeric、date、boolean、ip、geo_point、keyword。
- 前期成本较高的查询:
- fuzzy query(除了基于wildcard字段的)
- regexp query (除了基于wildcard字段的)
- prefix queries (除了基于wildcard字段的 或者 没有index_prefixes的)
- wildcard queries (除了基于wildcard字段的)
- range queries 基于 text 和 keyword字段
- Joining queries
-
每份文档成本可能较高的查询
-
script_score queries
-
percolate queries
-
可以通过设置 search.allow_expensive_queries 的值为 false 来组织这些查询的执行。(默认是true)。
Query and filter context
Relevance scores
默认情况下,Elasticsearch 对查询结果的排序是按照 相关分数,它用来测量一个文档与查询语句的匹配度。
相关分数是一个正浮点数,在查询API返回的元数据_score中。_score的值越高,文档相关度越高。每一个query都能计算相关分数但有所不同,query子句在 query和filter上下文中有所不同。
Query context
在查询上下文,一个查询子句回答问题:"文档和查询子句匹配度如何?"。不仅仅是确定文档是否匹配,还会计算相关度,值放到元数据_score中。
当我们给query参数提供查询子句时,这个就算查询上下文生效,比如在 search API中的query参数。
Filter context
在过滤上下文,一个查询子句回答问题:"这个文档和查询子句是否匹配?"。回答是简单的是与否,并不会计算分数。过滤上下文用于过滤结构化的数据,例如:
- timestamp 是否落在 2015和2016区间?
- status字段的值是否是 “published”?
Elasticsearch会自动缓存常用的过滤器,以提高性能。
当一个查询子句用filter参数传递时,过滤上下文生效,比如在bool查询中用 filter 、must_not参数, 在constant_score中用filter参数, 还有 filter aggregation。
Example of query and filter contexts
下面是在search API中使用查询语句的例子,有查询上下文、过滤上下文。
- title字段包含search这个词。
- content字段包含elasticsearch这个词。
- status字段包含准确的词 published。
- publish_date字段包含日期要大于等于2015-01-01。
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
query 参数,指明了这是一个 “查询上下文”。
bool和其中的两个match子句,都是在query上下文中的,他们用于计算文档匹配的分数的。
filter参数表明这是一个“过滤上下文”,里面的term、range子句都是用于过滤上下文中,他们会过滤出哪些文档匹配,但是并不会影响分数。
Compound queries
组合查询用于把其他组合或叶子查询整合起来,也会把结果和分数整合起来,改变它们的行为,或者把查询改为过滤上下文。
bool query:
- 用于整合其他的查询子句,如 must、should、must_not、filter 子句。
- must、should 子句会进行分数的整合,越匹配分数越高。
- must_not、filter 子句是在过滤上下文执行的。
boosting query:
- 返回匹配了positive语句的文档,但是对于也匹配了negative的文档要进行减分。
constant_score query:
- 它用于包括一个语句,被包裹语句在过滤上下文执行,所有匹配的文档会得相同的分数。
dis_max query:
- 由多个查询子句组成,满足其中任何一个查询子句的文档都返回。
- bool 查询组合会从所有匹配的查询中整合分数,dis_max查询是用那个最匹配的查询子句的分数。
function_score query:
- 对于查询语句返回的分数,如果搭配了functions,它能对分数进行调整,比如人气、新近、距离,或者用户定制的算法脚本。