Elasticsearch(009):es中index(索引)的新增、修改、删除、关闭等操作

Elasticsearch(009):es中index(索引)的新增、修改、删除、关闭等操作
瘦子没有夏天

文章目录
索引(Index)
1. 添加索引
2. 获取索引
3. 修改索引
4. 删除索引
5. 打开/关闭索引
6. 获取所有索引列表
索引(Index)
本篇文章主要学习索引的相关操作。

1. 添加索引
PUT example
{
    "settings" : {
        "index" : {
            "number_of_shards" : 2, #设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同的结点,提高了ES的处理能力和高可用性,这里设置为2。
            "number_of_replicas" : 1 #设置副本的数量,设置副本是为了提高ES的高可靠性,这里设置成设置为1
        }
    }
}

返回值

{
  "acknowledged" : true, #表示创建成功
  "shards_acknowledged" : true,
  "index" : "example"
}

当然还有不止一个参数针对Index,更多的可以参考这里。 todo

2. 获取索引
GET example
返回值

{
  "example" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1573387465030",
        "number_of_shards" : "2",
        "number_of_replicas" : "1",
        "uuid" : "yw-ZmC4ATjeukZb6N-ub8A",
        "version" : {
          "created" : "6050499"
        },
        "provided_name" : "example"
      }
    }
  }
}

上面的示例获取名为的索引的信息example。需要指定索引,别名或通配符表达式。

通过使用_all或*作为索引,get index API也可以应用于多个索引,或者应用于所有索引。

3. 修改索引
修改example索引的max_result_window的值,调大一些。默认是10000。使用ES的人肯定知道其分页在超过10000条数据后会报错。

Result window is too large, from + size must be less than or equal to: [10000] but was [78020]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.
1
所以这里我们以此为例来动态修改其值,来解决这个问题。

PUT example/_settings
{
  "index.max_result_window": 1000000000
}

返回结果

{
  "acknowledged" : true
}

我们通过刚刚的查询方法,获取索引,来查看我们的修改操作是否已经生效。

4. 删除索引
DELETE example
返回结果

{
  "acknowledged" : true
}

这时我们通过查询索引方法就会报错。如下

{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index",
        "index_uuid" : "_na_",
        "resource.type" : "index_or_alias",
        "resource.id" : "example",
        "index" : "example"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index",
    "index_uuid" : "_na_",
    "resource.type" : "index_or_alias",
    "resource.id" : "example",
    "index" : "example"
  },
  "status" : 404
}
5. 打开/关闭索引
打开和关闭索引API允许先关闭索引,然后再打开索引。封闭索引几乎没有集群开销(除了维护其元数据),并且被禁止进行读/写操作。可以打开一个封闭的索引,然后将通过正常的恢复过程。

REST端点为/{index}/_close和/{index}/_open。例如

#关闭索引
POST /example/_close
1
2
返回值

{
  "acknowledged" : true
}
#打开索引
POST /example/_open
返回值

{
  "acknowledged" : true,
  "shards_acknowledged" : true
}
6. 获取所有索引列表
#获取所有索引列表
GET _all
其实创建索引时也可以同时创建映射,也可以后面添加创建。我们下一小节将研究映射的问题。
————————————————
版权声明:本文为CSDN博主「瘦子没有夏天」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39723544/article/details/103825051

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个操作 Elasticsearch 的工具类: ```java import org.apache.http.HttpHost; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.DocWriteResponse; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import java.io.IOException; import java.util.Map; public class EsUtil { private static RestHighLevelClient client; static { RestClientBuilder builder = RestClient.builder( new HttpHost("localhost", 9200, "http") ); client = new RestHighLevelClient(builder); } /** * 创建索引 * * @param indexName 索引名称 * @param settings 索引配置 * @param mappings 索引映射 * @return 是否创建成功 */ public static boolean createIndex(String indexName, Settings settings, String mappings) { try { CreateIndexRequest request = new CreateIndexRequest(indexName); request.settings(settings); request.mapping(mappings, XContentType.JSON); CreateIndexResponse response = client.indices().create(request); return response.isAcknowledged(); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 判断索引是否存在 * * @param indexName 索引名称 * @return 是否存在 */ public static boolean existsIndex(String indexName) { try { return client.indices().exists(new GetIndexRequest(indexName), RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 删除索引 * * @param indexName 索引名称 * @return 是否删除成功 */ public static boolean deleteIndex(String indexName) { try { AcknowledgedResponse response = client.indices().delete(new DeleteIndexRequest(indexName), RequestOptions.DEFAULT); return response.isAcknowledged(); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 新增文档 * * @param indexName 索引名称 * @param id 文档id * @param source 文档内容 * @return 是否新增成功 */ public static boolean indexDocument(String indexName, String id, Map<String, Object> source) { try { IndexRequest request = new IndexRequest(indexName); request.id(id); request.source(source); IndexResponse response = client.index(request, RequestOptions.DEFAULT); return response.getResult() == DocWriteResponse.Result.CREATED || response.getResult() == DocWriteResponse.Result.UPDATED; } catch (IOException e) { e.printStackTrace(); return false; } } /** * 删除文档 * * @param indexName 索引名称 * @param id 文档id * @return 是否删除成功 */ public static boolean deleteDocument(String indexName, String id) { try { DeleteRequest request = new DeleteRequest(indexName, id); DeleteResponse response = client.delete(request, RequestOptions.DEFAULT); return response.getResult() == DocWriteResponse.Result.DELETED; } catch (IOException e) { e.printStackTrace(); return false; } } /** * 获取文档 * * @param indexName 索引名称 * @param id 文档id * @return 文档内容 */ public static Map<String, Object> getDocument(String indexName, String id) { try { GetRequest request = new GetRequest(indexName, id); GetResponse response = client.get(request, RequestOptions.DEFAULT); if (response.isExists()) { return response.getSourceAsMap(); } else { return null; } } catch (IOException e) { e.printStackTrace(); return null; } } /** * 搜索文档 * * @param indexName 索引名称 * @param query 查询条件 * @param size 返回数量 * @return 搜索结果 */ public static SearchHit[] search(String indexName, String query, int size) { try { SearchRequest request = new SearchRequest(indexName); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.queryStringQuery(query)); builder.size(size); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); if (response.status() == RestStatus.OK) { return response.getHits().getHits(); } else { return new SearchHit[0]; } } catch (IOException e) { e.printStackTrace(); return new SearchHit[0]; } } /** * 异步搜索文档 * * @param indexName 索引名称 * @param query 查询条件 * @param size 返回数量 * @param listener 异步回调 */ public static void searchAsync(String indexName, String query, int size, ActionListener<SearchResponse> listener) { SearchRequest request = new SearchRequest(indexName); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.queryStringQuery(query)); builder.size(size); request.source(builder); client.searchAsync(request, RequestOptions.DEFAULT, listener); } /** * 关闭客户端连接 */ public static void close() { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 这个工具类提供了创建索引删除索引新增文档、删除文档、获取文档、搜索文档等基本操作。其,`RestHighLevelClient` 用于操作 Elasticsearch,`RestClientBuilder` 用于创建 `RestHighLevelClient` 实例,`HttpHost` 表示 Elasticsearch 的主机和端口,可以根据实际情况修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值