一、基础操作
1、创建索引
elasticsearch不像关系型数据库需要先建表,指定具体的字段才能存入数据。我们可以直接向elasticsearch中插入数据,只要需要指定index(索引)和type(类型)就行了
格式如下:
PUT /index/type/id
{
“field1”:“value1”,
“field2”:“value2”
}
例:
这是在没有预先创建索引的情况下,使用PUT请求插入数据,必须指定id,elasticsearch中的每一个文档都有唯一id
注意:elasticsearch6及以后的版本一个索引只支持一个type
当然我们使用的时候基本都会预先创建好索引
使用 PUT /index 创建索引:
tips:
1、elasticsearch7已经不允许指定type,type默认为_doc,若需要指定type可以在请求url后接参数include_type_name=true,然后将properties包含在type中
2、查看所有索引:GET /_cat/indices
3、删除索引:DELETE /index
2、插入数据

插入数据时也可以写入没有映射的字段,通过 dynamic (在创建索引映射字段时设置,与properties同级)参数来控制字段的新增,这个参数的值如下:
true:动态添加新的字段–缺省
false:忽略新的字段
strict:如果遇到新字段抛出异常
3、简单的数据查询
指定索引查询所有文档:
GET /index/_search
{
“query”: {
“match_all”: {}
}
}
hits里的hits即为我们写入的文档,match_all表示查询所有文档
通过id删除文档:DELETE /index/type/id
二、在Java项目中使用elasticsearch
1、添加依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
2、使用rest-high-level-client
application.properties中配置:
elasticsearch.host=127.0.0.1
elasticsearch.port=9200
然后:
public class RestHighLevelClientFactory {
@Value("${elasticsearch.host}")
String HOST;
@Value("${elasticsearch.port}")
int PORT;
private static RestHighLevelClientFactory restHighLevelClientFactory = new RestHighLevelClientFactory();
public static RestHighLevelClientFactory biuld(){
return restHighLevelClientFactory;
}
private RestHighLevelClient restHighLevelClient;
public void init() {
restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(HOST, PORT, "http")));
}
public void destroy() {
try {
if(restHighLevelClient!=null) {
restHighLevelClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public RestHighLevelClient getRHLClient() {
return restHighLevelClient;
}
}
@Configuration
public class ElasticsearchConfig {
@Bean(initMethod="init",destroyMethod="destroy")
public RestHighLevelClientFactory getRestHighLevelClientFactory() {
return RestHighLevelClientFactory.biuld();
}
@Bean
@Singleton
public RestHighLevelClient getRestHighLevelClient() {
return getRestHighLevelClientFactory().getRHLClient();
}
}
然后就可以使用@Autowired声明RestHighLevelClient对象了:
@Component
public class ElasticsearchDao {
@Autowired
RestHighLevelClient restHighLevelClient;
@Autowired
Gson gson;
@Value("${elasticsearch.index}")
String INDEX;
@Value("${elasticsearch.type}")
String TYPE;
public String queryAll() {
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery()); // 对应kibana查询中的query match_all
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(INDEX);
searchRequest.types(TYPE);
searchRequest.source(sourceBuilder);
try {
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hits = response.getHits().getHits();
return gson.toJson(hits[0].getSourceAsString());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
然后测试: