elasticsearch使用

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,它能对分数进行调整,比如人气、新近、距离,或者用户定制的算法脚本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值