ElasticSearch 入门

ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能
Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
为什么要用ElasticSearch
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
 
es安装
 
java版本要求:最低1.7 
官网下载:
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操作
新建索引包含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": [
      "<em>"
    ],
    "post_tags": [
      "</em>"
    ],
    "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    
  }
}
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/double-yuan/p/9799498.html