feat: 优化索引创建

This commit is contained in:
jaime 2025-02-27 10:26:14 +08:00
parent d6c6ffe64d
commit 7574a0ee9a
4 changed files with 45 additions and 38 deletions

View File

@ -164,7 +164,7 @@ public interface BaseEsMapper<T> {
* @param wrapper 条件 * @param wrapper 条件
* @return 查询参数 * @return 查询参数
*/ */
SearchRequest.Builder getSearchSourceBuilder(Wrapper<T> wrapper); SearchRequest.Builder getSearchBuilder(Wrapper<T> wrapper);
/** /**
* es原生查询 * es原生查询

View File

@ -201,7 +201,7 @@ public class BaseEsMapperImpl<T> implements BaseEsMapper<T> {
} }
@Override @Override
public SearchRequest.Builder getSearchSourceBuilder(Wrapper<T> wrapper) { public SearchRequest.Builder getSearchBuilder(Wrapper<T> wrapper) {
return WrapperProcessor.buildSearchBuilder(wrapper, entityClass); return WrapperProcessor.buildSearchBuilder(wrapper, entityClass);
} }

View File

@ -10,6 +10,7 @@ import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse; import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonData;
import co.elastic.clients.transport.rest_client.RestClientOptions; import co.elastic.clients.transport.rest_client.RestClientOptions;
import org.dromara.easyes.common.constants.BaseEsConstants;
import org.dromara.easyes.core.biz.EntityInfo; import org.dromara.easyes.core.biz.EntityInfo;
import org.dromara.easyes.core.biz.EsPageInfo; import org.dromara.easyes.core.biz.EsPageInfo;
import org.dromara.easyes.core.biz.OrderByParam; import org.dromara.easyes.core.biz.OrderByParam;
@ -940,39 +941,39 @@ public class AllTest {
} }
// 4.删除 // 4.删除
// @Test @Test
// @Order(76) @Order(76)
// public void testDeleteById() { public void testDeleteById() {
// int count = documentMapper.deleteById("1"); int count = documentMapper.deleteById("1");
// Assertions.assertEquals(1, count); Assertions.assertEquals(1, count);
// } }
//
// @Test
// @Order(77)
// public void testDeleteBatchIds() {
// List<String> idList = Arrays.asList("2", "3", "4");
// int count = documentMapper.deleteBatchIds(idList);
// Assertions.assertEquals(3, count);
// }
// @Test @Test
// @Order(78) @Order(77)
// public void testDeleteByWrapper() { public void testDeleteBatchIds() {
// LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); List<String> idList = Arrays.asList("2", "3", "4");
// wrapper.match(Document::getCreator, "老汉"); int count = documentMapper.deleteBatchIds(idList);
// Assertions.assertEquals(3, count);
// int count = documentMapper.delete(wrapper); }
// Assertions.assertEquals(18, count);
// }
// @Test @Test
// @Order(80) @Order(78)
// public void testDeleteIndex() { public void testDeleteByWrapper() {
// boolean deleted = documentMapper.deleteIndex(EntityInfoHelper.getEntityInfo(Document.class).getIndexName()); LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
// boolean lockDeleted = documentMapper.deleteIndex(BaseEsConstants.LOCK_INDEX); wrapper.match(Document::getCreator, "老汉");
// Assertions.assertTrue(deleted);
// Assertions.assertTrue(lockDeleted); int count = documentMapper.delete(wrapper);
// } Assertions.assertEquals(18, count);
}
@Test
@Order(80)
public void testDeleteIndex() {
boolean deleted = documentMapper.deleteIndex(EntityInfoHelper.getEntityInfo(Document.class).getIndexName());
boolean lockDeleted = documentMapper.deleteIndex(BaseEsConstants.LOCK_INDEX);
Assertions.assertTrue(deleted);
Assertions.assertTrue(lockDeleted);
}
@Test @Test
@Order(79) @Order(79)
@ -996,7 +997,8 @@ public class AllTest {
.must(d -> d.terms(e -> e.field("state").terms(f -> f.value(values)))) .must(d -> d.terms(e -> e.field("state").terms(f -> f.value(values))))
)); ));
System.out.println(boolQueryBuilder); Query query = boolQueryBuilder.build()._toQuery();
System.out.println(query.toString());
System.out.println("--------------------"); System.out.println("--------------------");
// MP及EE写法 // MP及EE写法
@ -1004,7 +1006,12 @@ public class AllTest {
wrapper.eq("business_type", 1) wrapper.eq("business_type", 1)
.and(a -> a.eq("state", 9).or(b -> b.eq("state", 8).eq("bidding_sign", 1))) .and(a -> a.eq("state", 9).or(b -> b.eq("state", 8).eq("bidding_sign", 1)))
.or(i -> i.eq("business_type", 2).in("state", 2, 3)); .or(i -> i.eq("business_type", 2).in("state", 2, 3));
documentMapper.selectList(wrapper); SearchRequest.Builder searchBuilder = documentMapper.getSearchBuilder(wrapper);
Query qry = searchBuilder.build().query();
if (qry != null) {
System.out.println(qry);
}
List<Document> documents = documentMapper.selectList(wrapper);
} }
} }

View File

@ -108,7 +108,7 @@ public class MixTest {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eq(Document::getTitle, "老汉") wrapper.eq(Document::getTitle, "老汉")
.match(Document::getContent, "推*"); .match(Document::getContent, "推*");
SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchBuilder(wrapper);
// 追加或者设置一些SearchSourceBuilder支持但EE暂不支持的参数 不建议追加query参数,因为如果追加query参数会直接覆盖上面EE已经帮你生成好的query,以最后set的query为准 // 追加或者设置一些SearchSourceBuilder支持但EE暂不支持的参数 不建议追加query参数,因为如果追加query参数会直接覆盖上面EE已经帮你生成好的query,以最后set的query为准
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(3L)); searchSourceBuilder.timeout(TimeValue.timeValueSeconds(3L));
@ -127,7 +127,7 @@ public class MixTest {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eq(Document::getTitle, "老汉") wrapper.eq(Document::getTitle, "老汉")
.match(Document::getContent, "推*"); .match(Document::getContent, "推*");
SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchBuilder(wrapper);
// ElasticsearchClient原生语法 // ElasticsearchClient原生语法
AggregationBuilder aggregation = AggregationBuilders.terms("titleAgg") AggregationBuilder aggregation = AggregationBuilders.terms("titleAgg")
@ -148,7 +148,7 @@ public class MixTest {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eq(Document::getTitle, "老汉") wrapper.eq(Document::getTitle, "老汉")
.match(Document::getContent, "推*"); .match(Document::getContent, "推*");
SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchSourceBuilder(wrapper); SearchRequest.Builder searchSourceBuilder = documentMapper.getSearchBuilder(wrapper);
// 用户又想在上面的基础上,再追加一些个性化的查询参数进去 但实际上此时执行查询时,查询条件仅仅是最后设置的title=隔壁老王,前面的老汉推*会被覆盖 // 用户又想在上面的基础上,再追加一些个性化的查询参数进去 但实际上此时执行查询时,查询条件仅仅是最后设置的title=隔壁老王,前面的老汉推*会被覆盖
searchSourceBuilder.query(QueryBuilders.matchQuery("title", "隔壁老王")); searchSourceBuilder.query(QueryBuilders.matchQuery("title", "隔壁老王"));