Elasticsearch, 搜索,查询,http端口API
ES http协议API官网地址:https://www.elastic.co/guide/index.html建议先看引言:https://www.elastic.co/guide/en/elasticsearch/reference/index.html里面有相关的API说明,java rest客户端api:https://www.elastic.co/guide/en/elasticsear
ES http协议API
官网地址: https://www.elastic.co/guide/index.html
建议先看引言:https://www.elastic.co/guide/en/elasticsearch/reference/index.html
里面有相关的API说明,
java rest客户端api: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/index.html
我就只列举一下我觉得比较常用的的API文档
先说一下基本可以在浏览器中使用的API:
- 查询健康状态:
http://192.168.23.10:9201/_cat/health?v - 查询所有节点
http://192.168.23.10:9201/_cat/nodes?v - 查询所有索引
http://192.168.23.10:9201/_cat/indices?v - 查询单个索引的 mapping 和 设置详情
http://192.168.23.10:9201/索引名称/ - 根据数据的ID查询数据详情
http://192.168.23.10:9201/索引名称/类型/id号 - 查询索引的所有数据
http://192.168.23.10:9201/索引名称/_search
http://192.168.23.10:9201/索引名称/_search?from=1&size=10
http://192.168.23.10:9201/索引名称/_search?from=1&size=10&_source=mobile,user_id
http://192.168.23.10:9201/索引名称/_search?q=city:%E6%B7%B1
maven 库,根据不同版本的ES,选择不同的库
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.4.3</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.4.3</version>
</dependency>
客户端连接
class ElasticClient{
private static RestHighLevelClient client;
private static ElasticClient ela;
private ElasticClient() {
//可以指定多个 节点的 地址
// client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.23.10",9201,"http"),new HttpHost("192.168.23.11",9201,"http")));
client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.23.10",9201,"http")));
}
public RestHighLevelClient getClient() {
return client;
}
public static ElasticClient init() {
if(ela == null) {
synchronized (ElasticClient.class) {
if(ela !=null) {
return ela;
}
ela = new ElasticClient();
return ela;
}
}
return ela;
}
}
新建索引
public static RestHighLevelClient init() {
return ElasticClient.init().getClient();
}
public static void CreateIndexRequests() throws Exception {
//指定索引名称
CreateIndexRequest request = new CreateIndexRequest("search_text");
//指定分片和 备份数量
request.settings(Settings.builder().put("index.number_of_shards", 2).put("index.number_of_replicas", 1));
XContentBuilder b= XContentFactory.jsonBuilder();
b.startObject();
{
b.startObject("properties");
{
b.startObject("title");
{
b.field("type", "text");//类型 keyword不分词,text 分词
b.field("analyzer", "ik_max_word");//指定分词器
b.field("search_analyzer", "ik_max_word");//指定分词器
}
b.endObject();
b.startObject("content");
{
b.field("type", "text");//类型 keyword不分词,text 分词
b.field("analyzer", "ik_max_word");//指定分词器
b.field("search_analyzer", "ik_max_word");//指定分词器
}
b.endObject();
}
b.endObject();
}
b.endObject();
//指定type 类型
request.mapping("_doc", b);
try {
CreateIndexResponse rep = init().indices().create(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
向索引中添加数据
public static void IndexRequest(String title,String content) {
IndexRequest request = new IndexRequest("search_text").type("_doc");
Map<String, Object> m = new HashMap<String, Object>();
// m.put("title", "搜索信息标题:"+j);
// m.put("value", "搜索信息内容:"+j);
m.put("title", title);
m.put("content", content);
// 索引中接口一个map对象数据,也可以是JSON格式字符串也能支持
request.source(m);
try {
IndexResponse rep = init().index(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
删除索引
public static void deleteIndexRequest() {
//指定删除的索引名称
DeleteIndexRequest request = new DeleteIndexRequest("cat_luo_1");
try {
DeleteIndexResponse rep = init().indices().delete(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
查询多个 索引的 信息(mapping)
public static void listIndexRequest() {
GetIndexRequest getIndexRequest = new GetIndexRequest();
getIndexRequest.indices("cat_luo_1","cat_luo_2");
try {
GetIndexResponse rep = init().indices().get(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
判断索引是否存在
public static void existsIndexRequest() {
GetIndexRequest request = new GetIndexRequest();request.indices("cat_luo_1");
try {
boolean rep = init().indices().exists(request, RequestOptions.DEFAULT);
System.out.println(rep);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
停用和 启用索引
/**
* 启用索引
*/
public static void openIndexRequest() {
OpenIndexRequest request = new OpenIndexRequest("cat_luo_1");
try {
OpenIndexResponse rep = init().indices().open(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
/**
* 停用索引
*/
public static void closeIndexRequest() {
CloseIndexRequest request = new CloseIndexRequest("cat_luo_1");
try {
CloseIndexResponse rep = init().indices().close(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
根据ID 查询数据
```java
/**
* ID 必须有
*/
public static void GetRequest() {
// 索引名称,类型,ID
GetRequest request = new GetRequest("cat_luo_2").type("_doc").id("CxOGDnMBUhwOurg721NN");
try {
GetResponse rep = init().get(request, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
查询数据
public static void SearchRequest() {
try {
SearchSourceBuilder b = new SearchSourceBuilder();
//指定字段查询
b.query(QueryBuilders.termQuery("title", "a"));
//指定索引 和 类型
SearchRequest searchRequest = new SearchRequest("search_text").types("_doc");
searchRequest.source(b);
SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
简单查询匹配字符串
//输入要查询的字符串, 也可以指定在那个字段上查询,也可以不指定,该字符串会被分词
QueryBuilder bu = QueryBuilders.simpleQueryStringQuery("a").field("title")
term查询
指定词句查询。
例如:“佩奇是一只猪”,假设被分词为 “佩奇”,“是”,“一只”,“猪”
当使用 “佩奇”,“猪”这种去查询 可以用过 term 匹配到该记录
但是 通过“一只猪” 来查询,就查询不到,以为 “一只猪” 不在索引的词语里面
QueryBuilder bu = QueryBuilders.termQuery("title", "a");
bool 组合查询
bool查询里面 可以组合 must。 mustnot, should , term 等查询方式
must 必须包含
mustnot 必须不包含
should 或
例如有一个索引,2个字段,title 标题,value 内容
查询条件:找出title中必须包含字符串“a”,并且“value“必须包含 字符串 “c”或者“b”
那么查询条件就是
QueryBuilder bu = QueryBuilders.boolQuery()
.must(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("title", "a")))
.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("value", "c"))
.should(QueryBuilders.termQuery("value", "b")));
模糊搜索
//模糊搜索
QueryBuilder bu1 = QueryBuilders.fuzzyQuery("value", "c");
范围搜索
from 开始 ,to 结束
QueryBuilders.rangeQuery("字段").from("").to("");
正则匹配查询
//匹配查询
QueryBuilder bu5 = QueryBuilders.wildcardQuery("title", "*b");
普通字符串查询
//会对输入字符串 进行分词查询
QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
对查询结果高亮显示
public static void SearchRequest() {
try {
SearchSourceBuilder b = new SearchSourceBuilder();
QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
b.query(bu6);
HighlightBuilder h = new HighlightBuilder();
h.field("title"); //指定高亮显示字段
h.field("content"); //指定高亮显示字段
b.highlighter(h);
SearchRequest searchRequest = new SearchRequest("search_text").types("_doc");
searchRequest.source(b);
SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
对结果进行分页 或者是 游标查询
在进行深度分页时,建议使用游标查询,有效提升查询效率
public static void SearchRequest() {
try {
SearchSourceBuilder b = new SearchSourceBuilder();
QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
b.query(bu6);
b.from(0);b.size(5); //指定分页大小
SearchRequest searchRequest = new SearchRequest("search_text").types("_doc");
searchRequest.source(b);
//游标有效期 1分钟
searchRequest.scroll(TimeValue.timeValueMinutes(1L));
SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
System.out.println(rep.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// (request, null);
}
更多推荐
所有评论(0)