java操作 elasticsearch8.0 doc檔案<二>
- 本文所有代碼在文章最后
- 創建doc檔案
- 修改doc自定義屬性
- 獲取doc資訊
- 洗掉doc
- 批量添加doc
- 批量洗掉doc
- 批量更新doc
- 查詢user索引所有資料
- 條件查詢 查詢age為15的資料
- 分頁查詢 排序 過濾欄位
- 組合查詢
- 范圍查詢
- from to查詢
- 大于小于查詢
- 模糊查詢 高亮顯示
- 聚合操作
- User物體類
- es操作
本文所有代碼在文章最后
本文所有代碼在文章最后
創建doc檔案
如何連接請看上一篇文章
https://blog.csdn.net/u013979493/article/details/123122242?spm=1001.2014.3001.5502
User user = new User("10002", "lisi", 20, "男");
IndexResponse indexResponse = client.index(
x -> x.index("user").id(user.getId()).document(user));
修改doc自定義屬性
User user = new User();
//修改什么屬性就set什么值
user.setAge(101);
UpdateResponse<User> userUpdateResponse = client.update(
x -> x.index("user").id("10002").doc(user), User.class);
獲取doc資訊
GetResponse<User> getResponse = client.get(x -> x
.index("user")
.id("10002")
, User.class);
洗掉doc
client.delete(x -> x.index("user").id("10002"));
批量添加doc
//創建user串列
List<User> users = new ArrayList<>();
users.add(new User("15", "張三", 10, "女"));
users.add(new User("16", "張四", 10, "女"));
users.add(new User("17", "張五六", 11, "女"));
users.add(new User("18", "張三四", 12, "女"));
users.add(new User("19", "張三五", 13, "女"));
users.add(new User("20", "張三六七", 14, "女"));
users.add(new User("21", "張三1", 15, "女"));
//創建BulkOperation串列準備批量插入doc
List<BulkOperation> bulkOperations = new ArrayList<>();
//將user中id作為es id,也可不指定id es會自動生成id
users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));
批量洗掉doc
List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");
strings.add("4");
strings.add("5");
strings.add("6");
strings.add("7");
List<BulkOperation> bulkOperations = new ArrayList<>();
strings.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.delete(c -> c.id(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));
批量更新doc
與添加洗掉同理
查詢user索引所有資料
SearchResponse<User> searchResponse = client.search(a -> a.index("user"), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
條件查詢 查詢age為15的資料
earchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.term(c -> c
.field("age")
.value(d -> d
.longValue(15)
)
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
分頁查詢 排序 過濾欄位
SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
//從第0條到第4條
.from(0)
.size(5)
//按年齡降序排序
.sort(b -> b
.field(c -> c
.field("age")
.order(SortOrder.Desc)
)
)
.source(c -> c
.filter(d -> d
//不包含欄位
.excludes("id", "age")
//包含欄位
.includes("name")
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
組合查詢
SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.bool(c -> c
//必須不滿足某些條件
.mustNot(d -> d.match(e -> e.field("sex").query(f -> f.stringValue("男"))))
//可同時滿足某些條件
.should(d -> d.match(e -> e.field("age").query(f -> f.longValue(10))))
.should(d -> d.match(e -> e.field("age").query(f -> f.longValue(12))))
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
范圍查詢
from to查詢
SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.range(c -> c.field("age").from("10").to("12"))
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
大于小于查詢
SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
//小于等于
// .range(c -> c.field("age").lte(JsonData.of("13")))
//小于
// .range(c -> c.field("age").lt(JsonData.of("13")))
//大于等于
// .range(c -> c.field("age").gte(JsonData.of("13")))
//大于
// .range(c -> c.field("age").gt(JsonData.of("13")))
//范圍
.range(c -> c.field("age").from("10").to("13"))
)
.sort(b -> b.field(c -> c.field("age").order(SortOrder.Asc)))
//經測驗,若不指定size則只會回傳前十條資料,此處這是size是想回傳所有資料,如有更好的方法清指教
.size(1000), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
模糊查詢 高亮顯示
SearchResponse<User> searchResponse = client.search(_0 -> _0
.query(_1 -> _1
.fuzzy(_2 -> _2
.field("name")
//最大偏移量,意為最多有能有幾個不符合的
.fuzziness("1")
//最大查詢數量
// .maxExpansions(5)
.value(_3 -> _3
.stringValue("張四")
)
)
)
//高亮
.highlight(_4 -> _4
.fields("name", _5 -> _5
.preTags("<font color='red'>")
.postTags("</font>")
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));
聚合操作
SearchResponse<Map> search = client
.search(_0 -> _0
//按年齡進行分組
.aggregations("ageGroup", _1 -> _1
.terms(_2 -> _2
.field("age")
)
), Map.class);
System.out.println(search);
本文所有方法本人以測驗正常使用,如有錯誤請指正,一起討論
以下為本文所有代碼
User物體類
public class User {
private String id;
private String name;
private int age;
private String sex;
public User() {
}
public User(String id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
es操作
public class ESClientDemo {
private static final String clusterNodes = "127.0.0.1:9201";
private static final String account = "elastic";
private static final String passWord = "D4ibOD8mtcItd_p_FGUO";
public static ElasticsearchClient client;
public static RestClientBuilder builder;
public static RestClient restClient;
public static ElasticsearchTransport transport;
//有密碼登錄
public static void main(String[] args) {
try {
HttpHost[] httpHosts = Arrays.stream(clusterNodes.split(",")).map(x -> {
String[] hostInfo = x.split(":");
return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
}).toArray(HttpHost[]::new);
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//設定賬號密碼
credentialsProvider.setCredentials(
AuthScope.ANY, new UsernamePasswordCredentials(account, passWord));
builder = RestClient.builder(httpHosts)
.setHttpClientConfigCallback(httpClientBuilder ->
httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider));
// Create the low-level client
restClient = builder.build();
// Create the transport with a Jackson mapper
transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
// And create the API client
client = new ElasticsearchClient(transport);
// Boolean acknowledged = client.indices().create(c -> c.index("user")).acknowledged();
// System.out.println("創建索引: " + (Boolean.TRUE.equals(acknowledged) ? "成功" : "失敗"));
// GetIndexResponse getIndexResponse = client.indices().get(c -> c.index("user"));
// System.out.println("獲取索引 user 回應: " + getIndexResponse);
// DeleteIndexResponse deleteIndexResponse = client.indices().delete(c -> c.index("user"));
// System.out.println("洗掉索引 user 回應: " + deleteIndexResponse);
//創建doc
// User user = new User("lisi", 20, "男");
// IndexResponse indexResponse = client.index(
// x -> x.index("user").id("10002").document(user));
//修改doc部分屬性
// User user = new User();
// user.setAge(101);
// UpdateResponse<User> userUpdateResponse = client.update(
// x -> x.index("user").id("10002").doc(user), User.class);
//獲取doc資訊
// GetResponse<User> getResponse = client.get(x -> x.index("user").id("10002"), User.class);
//洗掉doc
// client.delete(x -> x.index("user").id("10002"));
//批量添加doc
/*List<User> users = new ArrayList<>();
users.add(new User("15", "張三", 10, "女"));
users.add(new User("16", "張四", 10, "女"));
users.add(new User("17", "張五六", 11, "女"));
users.add(new User("18", "張三四", 12, "女"));
users.add(new User("19", "張三五", 13, "女"));
users.add(new User("20", "張三六七", 14, "女"));
users.add(new User("21", "張三1", 15, "女"));
List<BulkOperation> bulkOperations = new ArrayList<>();
users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));*/
//批量洗掉doc
/*List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");
strings.add("4");
strings.add("5");
strings.add("6");
strings.add("7");
List<BulkOperation> bulkOperations = new ArrayList<>();
strings.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.delete(c -> c.id(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));*/
//查詢user索引所有資料
/*SearchResponse<User> searchResponse = client.search(a -> a.index("user"), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//條件查詢
/*SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.term(c -> c
.field("age")
.value(d -> d
.longValue(15)
)
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//分頁查詢 排序 過濾欄位
/*SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.from(0)
.size(5)
.sort(b -> b
.field(c -> c
.field("age")
.order(SortOrder.Desc)
)
)
.source(c -> c
.filter(d -> d
//不包含欄位
.excludes("id", "age")
//包含欄位
.includes("name")
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//組合查詢
/*SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.bool(c -> c
.mustNot(d -> d.match(e -> e.field("sex").query(f -> f.stringValue("男"))))
.should(d -> d.match(e -> e.field("age").query(f -> f.longValue(10))))
.should(d -> d.match(e -> e.field("age").query(f -> f.longValue(12))))
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//范圍查詢
/*SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
.range(c -> c.field("age").from("10").to("12"))
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
/*SearchResponse<User> searchResponse = client
.search(a -> a
.index("user")
.query(b -> b
//小于等于
// .range(c -> c.field("age").lte(JsonData.of("13")))
//小于
// .range(c -> c.field("age").lt(JsonData.of("13")))
//大于等于
// .range(c -> c.field("age").gte(JsonData.of("13")))
//大于
// .range(c -> c.field("age").gt(JsonData.of("13")))
//范圍
.range(c -> c.field("age").from("10").to("13"))
)
.sort(b -> b.field(c -> c.field("age").order(SortOrder.Asc)))
.size(999999999), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//模糊查詢 高亮顯示
/*SearchResponse<User> searchResponse = client.search(_0 -> _0
.query(_1 -> _1
.fuzzy(_2 -> _2
.field("name")
//最大偏移量
.fuzziness("1")
//最大查詢數量
// .maxExpansions(5)
.value(_3 -> _3
.stringValue("張四")
)
)
)
.highlight(_4 -> _4
.fields("name", _5 -> _5
.preTags("<font color='red'>")
.postTags("</font>")
)
), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
//分組操作
/*SearchResponse<Map> search = client
.search(_0 -> _0
.aggregations("ageGroup", _1 -> _1
.terms(_2 -> _2
.field("age")
)
), Map.class);
System.out.println(search);*/
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
client.shutdown();
transport.close();
restClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
制作不易,請尊重作者的勞動成果
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/434518.html
標籤:其他
上一篇:剩余/長尾流量如何售賣廣告
