ElasticSearch
全文搜索属于最常见的需求,开源的Elasticsearch 是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它 https://www.elastic.co/
Elasticsearch: 权威指南 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
下载 安装 elasticsearch
docker pull elasticsearch:7.4.2 下载ES
docker pull kibana:7.4.2 下载可视化界面
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
/*/*/注意e ES_JAVA_OPTS="-Xms64m -Xmx512m" \ 一定要设置很大
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e “discovery.type=single-node” \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
chmod -R 777 /mydata/elasticsearch/ 加权限
访问 http://192.168.56.10:9200/ 显示json 安装成功
安装运行Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
访问 http://192.168.56.10:5601/ 安装成功
初步检索
1、cat
GET/_cat/nodes: 查看所有节点
GET/_cat/health: 查看es健康状况
GET/_cat/master: 查看主节点
GET/_cat/indices: 查看所有索引 show databases;
POST 新增:不带id,带id但之前没数据| 修改:带id,并且有数据
PUT 必须带上ID
GRT 查询
测试数据
es数据:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip 文档地址教程 https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-search.html
发起查询
固定写法 query json 查询条件 sort 排序条件 match_all查询所有 Query DSL 领域对象语言
GET /bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"account_number": "asc"
}
],
"from": 0,
"size": 5, //每页大小
"_source":[ "balance","firstname"] //指定返回字段
}
Match 查询 指定匹配查询
GET /bank/_search //##全文检索 按照评分进行排序 会对检索条件进行分词匹配
{
"query": {
"match": {
"address": "Kings"
}
}
}
返回
"hits" : {
"total" : {
"value" : 2, //命中数几条
"relation" : "eq"
},
"max_score" : 5.9908285, //最大得分
"hits" : [
短词匹配 完全匹配 不分割 (但是 不区分大小写)
GET /bank/_search
{
"query": {
"match_phrase": {
"address": "mill lane"
}
}
}
多字段匹配
GET /bank/_search
{
"query": {
"multi_match": {
"query": "mill Movico", //查询mill 或mill
"fields": ["address","address"] //在哪里包含
}
}
}
多条件 bool 查询
GET /bank/_search
{
"query": {
"bool": { bool 查询
"must": [ //must 必须满足
{"match": { //match 条件
"gender": "m"
}},
{"match": {
"address": "Mill"
}}
],
"must_not": [ //必须不匹配
{"match": {
"age": "38"
}}
],
"should": [ //满足也行 不满足也行 满足给max_score 相关性得分
{"match": {
"lastname": "Wallace"
}}
]
}
}
}
must 过滤 支持相关性得分
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
]
}
}
}
filter 过滤 不支持相关性得分
GET /bank/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
]
}
}
term 查询 非文本字段
比如数字之类的 完全匹配;文本字段使用match查询 和match一样。匹配某个属性的值。全文检索字段用match,其他非text字段匹配用term.
GET /bank/_search
{
"query": {
"term": {
"balance": "29104"
}
}
}