ElasticSearch 全文搜索属于最常见的需求,开源的Elasticsearch 是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它 https://www.elas
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" } } }