ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能
Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
为什么要用ElasticSearch
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
es安装
java版本要求:最低1.7
官网下载:
ElasticSearch:
kibana:
windows下安装:
1.解压下载的压缩包,
2.编辑elasticsearch根目录/config/elasticsearch.yml
cluster .name : 集群名 ,分布式部署,确保该名称唯一。
network.host: 192.168.0.61 :ip地址
http.port: 9200 端口
3.启动根目录下的bin文件夹下的elasticsearch.bat即可
kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。
windows下安装:
1.解压下载的压缩包,
2.kibana根目录下config/kibana.yml
server.port :5601 kibana端口
server.host :localhost ip地址
elasticsearch.url : "http://192.168.0.61:9200" es连接
3.启动根目录下的bin文件夹下的kibana.bat
打开浏览器 访问 http://localhost:5601/
接下来就可以操作es了
es官方文档
es操作
新建索引包含setting和mapping
PUT /my_index_name{ "settings": { "number_of_replicas": 1, "number_of_shards": 3, "analysis": {}, "refresh_interval": "1s" }, "mappings": { "my_type_name": { //type名字 "properties": { //type的字段属性 "title": { "type": "text", "analyzer": "ik_max_word" }, "name":{ "type": "text", "analyzer": "ik_max_word" }, "num":{ "type": "integer" } } } }}
也可以单独创建setting和mapping
字段属性创建好以后,如果要修改设置的某个字段的属性是修改不了的,可以
添加数据
POST my_index_name/my_type_name{ "title":"测试title", "name":"测试", "num":1}
修改数据
POST my_index_name/my_type_name/AWZ8KV5GLlhkZVrwqqUS{ "title":"测试title", "name":"测试111", "num":1}
删除索引
不能删除某个类型
DELETE my_index_name
es查询
1.简单基本操作
GET _search{ "query": { "match": { "FIELD": "TEXT" } }}
GET /_search{ "query": { "bool": { //组合查询,各个子句之间的逻辑关系是与(and) "must": [ 必须满足的条件 { "match": { //普通匹配查询 "username": "smith" } } ], "must_not": [ //必须不满足某条件 { "match_phrase": { //短语匹配查询 "username": "granny smith" } } ], "filter": [ //过滤器 文档必须匹配该过滤条件,跟must子句的唯一区别是,filter不影响查询的score; { "exists": { //存在 "field": "title" } } ] } }, "aggs": { //聚合 "my_agg": { //聚合名 "terms": { "field": "user", "size": 10 } } }, "highlight": { //高亮 "pre_tags": [ "" ], "post_tags": [ "" ], "fields": { "body": { "number_of_fragments": 1, "fragment_size": 20 }, "title": {} } }, "size": 20, //一次查询的数据量 "from": 100, //从第几条数据开始 "_source": [ //要查询的字段 "title", "id" ], "sort": [ //排序 { "_id": { "order": "desc" } } ]}
多字段查询
"multi_match": { "query": "Elastic", //匹配的字 "fields": ["user.*", "title^3"], //需要匹配的字段 "type": "best_fields" //multi_match查询在内部执行的方式 best_fields(默认)查找与任何字段匹配的文档}
组合查询
"bool": { "must": [], "must_not": [], "filter": [], "should": [], "minimum_should_match" : 1 //最小匹配度}
范围搜索
"range": { "age": { "gte": 10, "lte": 20, "boost": 2 }}