ElasticSearch 笔记 – 单机伪集群搭建 7.0.0

网上看了一下, 大都需要把elasticsearch程序拷贝多份, 然后修改配置.

程序有500多m, 蛮大的, 所以我想有没有只修改配置的方式…..

主要是三个地方:

  1. bin/elasticsearch.bat
  2. bin/elasticsearch-env.bat
  3. config文件夹

1.config文件夹(这里只做3个节点)

拷贝config文件夹, 命名为config-1, config-2, config-3
修改config/elasticsearch.yml
----------------------------------------------------------
#统一集群的名称(3个配置一样)
cluster.name: my-app
#当前节点名称
node.name: node-1
#当前节点数据
path.data: /data/elastic/data/1
#当前节点日志目录
path.data: /data/elastic/log/1
#当前节点端口(3个节点不同端口)
http.port: 9201
#指定初始的主节点(这里默认第一个)
cluster.initial_master_nodes: ["node-1"]
----------------------------------------------------------
其他两个文件夹做类似的修改

2.bin/elasticsearch-env.bat

找到设置"配置文件"的代码:
......
set HOSTNAME=%COMPUTERNAME%
if not defined ES_PATH_CONF (
  set ES_PATH_CONF=!ES_HOME!\config
)
......
把"set ES_PATH_CONF=!ES_HOME!\config" 修改为"set ES_PATH_CONF=!ES_HOME!\config-1", 另存为: bin/elasticsearch-env-1.bat
其他两个类似

3.bin/elasticsearch.bat

找到设置"环境变量"的代码:
......
CALL "%~dp0elasticsearch-env.bat" || exit /b 1
......
把"elasticsearch-env.bat" 修改为"elasticsearch-env-1.bat", 另存为: bin/elasticsearch-1.bat
其他两个类似

这样, 启动elasticsearch-1.bat/ elasticsearch-2.bat / elasticsearch-3.bat

就能建立单机集群.

6.X版本的参考: https://blog.csdn.net/qq_34021712/article/details/79330028

ElasticSearch 笔记 – 高级查询API

通用查询: match/multi_match
无论是全文搜索还是精确查询 它将用正确的分析器去分析查询字符串

范围查询: range

{
    "range": {
        "字段": {
            "gt":  20,
            "lt":   30
        }
    }
}

精确查询 term/terms

{ "term": { "age":    26 }}
term 查询对于输入的文本不分析 ,所以它将给定的值进行精确查询(包括在大小写、重音、空格等方面的差异)。

非空和空查询: exists/missing

{
    "exists":   {
        "field":    "字段"
    }
}
这与SQL中的 IS_NULL (missing) 和 NOT IS_NULL (exists) 在本质上具有共性

组合查询: bool

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }},
            { "range": { "date": { "gte": "2014-01-01" }}}
        ],
        "filter": {
          "range": { "date": { "lt": "2014-08-01" }} 
        }
    }
}
must
文档 必须 匹配这些条件才能被包含进来。
must_not
文档 必须不 匹配这些条件才能被包含进来。
should
如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
filter
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

constant_score 查询

{
    "constant_score":   {
        "filter": {
            "term": { "category": "ebooks" } 
        }
    }
}
它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下

查询分析: 在查询URL后加上explain

GET /_validate/query?explain
{
   "query": {
      "match" : {
         "tweet" : "really powerful"
      }
   }
}

如何选择查询与过滤编辑

通常的规则是,使用 查询(query)语句来进行 全文 搜索或者其它任何需要影响 相关性得分 的搜索。除此以外的情况都使用过滤(filters)。

ElasticSearch 笔记 – 基础API

#新增文档(可以指定id, 或者由es生成)
POST .kibana_1/_doc/[id]
{
  "visualization" : {
      "title" : "First ES Doc",
      "visState" : "this is my first es document2.",
      "uiStateJSON" : "{}",
    },
    "type" : "visualization",
    "updated_at" : "1556582400000"
}

#修改文档
PUT .kibana_1/_doc/466x1GoBzyYXTMCaEtuq
{
  "visualization" : {
      "title" : "First ES Doc",
      "visState" : "this is my first es document2.",
      "uiStateJSON" : "{}",
      "description" : "",
      "version" : 1,
      "kibanaSavedObjectMeta" : {
        "searchSourceJSON" : """{"query":{"query":"","language":"kuery"},"filter":[]}"""
      }
    },
    "type" : "visualization",
    "references" : [ ],
    "migrationVersion" : {
      "visualization" : "7.0.1"
    },
    "updated_at" : "1556582400000"
}

#id查找
GET .kibana_1/_doc/466x1GoBzyYXTMCaEtuq

#指定字段返回
GET .kibana_1/_doc/466x1GoBzyYXTMCaEtuq?_source=visualization.title,visualization.visState,type,migrationVersion

#分页查询size=多少, from从哪里开始
GET .kibana_1/_doc/_search?size=1&from=4000
{
  "query": {
    "match_all": {}
  }
}

#只返回内容
GET .kibana_1/_doc/466x1GoBzyYXTMCaEtuq/_source

#检查是否存在
HEAD .kibana_1/_doc/466x1GoBzyYXTMCaEtuq

#请求参数方式搜索
GET kibana_sample_data_ecommerce/_doc/_search?q=category:Men's Clothing+products.price:>700

#访问映射
GET kibana_sample_data_ecommerce/_mapping

# 分析器演示
GET /_analyze
{
  "analyzer": "english",
  "text": ["This is my house. i'm living here",
          "every one know that",
          "don't you know"]
}

#定义索引映射
PUT kibana_sample_data_ecommerce/_mapping
{
  "properties": {
      "category":{
        "type": "text",
        "index": true
      }
  }
}

#更新索引映射
es中想要给一个已经建好映射的索引改变映射结果,即使改变一个字段类型都是不支持的,
需要重新建立索引以及映射结构,然后把以前的数据导入到新建的索引结构中去,完成改变映射结构的目的。
步骤:
1.给已有的索引定一个别名,并指向该别名
2.新建一个新的索引,新的映射结构
3.将别名指向新的索引,取消旧的索引与别名之间的关联
通过这几部即可达到重新改变映射结构的内容,例如我们想改变library01的映射中price字段的类型由现有的double变为integer类型。

一个简单的例子:

#删除索引
DELETE products

#建立索引
PUT products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}
#建立映射
PUT products/_mapping
{
  "properties": {
    "category":{
      "type": "text",
      "index": true
    },
    "id":{
      "type": "text",
      "index": true
    },
    "name":{
      "type": "text",
      "analyzer": "standard"
    },
    "description":{
      "type": "text",
      "analyzer": "standard"
    },
    "price":{
      "type": "double"
    },
    "detail":{
      "type": "text",
      "analyzer": "standard"
    },
    "enabled":{
      "type": "boolean"
    },
    "picture":{
      "type": "text"
    }
  }
}
#查询映射
GET products/_mapping
#写入数据
POST /products/_doc
{
  "category": "HaiLan Home",
  "id": "A92934JSDFIQ9234SJDF",
  "name": "男裤",
  "description": "纯棉 男裤 夏季 清凉一夏 直筒",
  "price": 201.50,
  "enabled": true,
  "picture": "http://img.alicdn.com/tfscom/i4/1692495776/TB2vLAKaDMG5uJjSZFAXXbmspXa_%21%211692495776.jpg",
  "detail": "裤子是人们下体所穿的主要服饰。原写作“绔”、“袴”。从出土文物及传世文献来看,早在春秋时期,人们的下体己穿著裤,不过那时的裤子不分男女,都只有两只裤管,其形制和后世的套裤相似,无腰无裆,穿时套在胫上,即膝盖以下的小腿部分,所以这种裤子又被称为“胫衣”。左右各一,分衣两胫。因其只有两只裤管,所以裤的计数与鞋袜相同,都用“两”字来计,居延汉简中就有这样的情况。穿著这种裤子,其目的是为了遮护胫部,尤其在冬天,可以起到保暖的作用,至于膝盖以上部分则无遮护。"
}
#查询数据
GET products/_doc/_search

备注: 随着 7.0 版本的发布,type 的移除也是越来越近了,在 6.0 的时候,已经默认只能支持一个索引一个 type 了,7.0 版本新增了一个参数 include_type_name ,即让所有的 API 是 type 相关的,这个参数在 7.0 默认是 true,不过在 8.0 的时候,会默认改成 false,也就是不包含 type 信息了,这个是 type 用于移除的一个开关。 让我们看看最新的使用姿势吧,当 include_type_name 参数设置成 false 后:

 索引操作:
PUT {index}/{type}/{id}需要修改成PUT {index}/_doc/{id}
Mapping 操作:
PUT {index}/{type}/_mapping 则变成 PUT {index}/_mapping
所有增删改查搜索操作返回结果里面的关键字 _type 都将被移除, 父子关系使用 join 字段来构建