diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index f78ca87..0d5abe5 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -60,6 +60,12 @@
com.ruoyi
ruoyi-generator
+
+ com.ruoyi
+ ruoyi-biemo
+ 3.8.3
+ compile
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 32eb6f1..8c79619 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -3,13 +3,14 @@ package com.ruoyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
/**
* 启动程序
- *
+ *
* @author ruoyi
*/
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class , MongoAutoConfiguration.class})
public class RuoYiApplication
{
public static void main(String[] args)
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java b/ruoyi-admin/src/main/java/com/ruoyi/Test.java
similarity index 87%
rename from ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java
rename to ruoyi-admin/src/main/java/com/ruoyi/Test.java
index 72f63e9..3437020 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/nlp/Test.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/Test.java
@@ -1,4 +1,6 @@
-package com.ruoyi.biemo.nlp;
+package com.ruoyi;
+
+import com.ruoyi.biemo.nlp.NamedEntity;
public class Test {
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 9a7cba2..beaff32 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,5 +1,8 @@
# 数据源配置
spring:
+ elasticsearch:
+ rest:
+ uris: http://59.110.45.20:10000
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
diff --git a/ruoyi-biemo/pom.xml b/ruoyi-biemo/pom.xml
index 3e449b5..1e1bca9 100644
--- a/ruoyi-biemo/pom.xml
+++ b/ruoyi-biemo/pom.xml
@@ -56,7 +56,34 @@
hutool-all
${huTool.version}
-
+
+ org.elasticsearch.client
+ elasticsearch-rest-client
+ 7.9.3
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-high-level-client
+ 7.9.3
+
+
+ org.springframework.boot
+ spring-boot-starter-data-elasticsearch
+
+
+ org.elasticsearch
+ elasticsearch
+ 7.9.3
+
+
+ org.projectlombok
+ lombok
+
+
+ com.alibaba
+ fastjson
+ 1.2.4
+
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java
new file mode 100644
index 0000000..dec6424
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/annotation/EsId.java
@@ -0,0 +1,14 @@
+package com.ruoyi.biemo.elasticsearch.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @author zcw
+ * @version 1.0
+ * @date 2021/1/14 11:54
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface EsId {
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java
new file mode 100644
index 0000000..23b43f4
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/controller/TestESController.java
@@ -0,0 +1,39 @@
+package com.ruoyi.biemo.elasticsearch.controller;
+
+import com.ruoyi.biemo.elasticsearch.entity.Topic;
+import com.ruoyi.biemo.elasticsearch.service.TestService;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * @author zcw
+ * @version 1.0
+ * @date 2021/1/14 11:19
+ */
+@RestController
+@RequestMapping(value = "/es")
+public class TestESController {
+
+ @Autowired
+ private TestService testService;
+
+ @PostMapping(value = "insert")
+ public void insertOrUpdateOne(@RequestBody Topic entity) {
+ testService.insertOrUpdateOne(entity);
+ }
+
+ @GetMapping(value = "/get")
+ public List get() {
+ return testService.search(new SearchSourceBuilder());
+ }
+
+ @GetMapping(value = "/test111")
+ public List test(){
+ return testService.test();
+ }
+
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java
new file mode 100644
index 0000000..e4f95da
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/entity/Topic.java
@@ -0,0 +1,30 @@
+package com.ruoyi.biemo.elasticsearch.entity;
+
+import com.ruoyi.biemo.elasticsearch.annotation.EsId;
+import lombok.Data;
+import org.springframework.data.elasticsearch.annotations.Document;
+
+@Data
+@Document(indexName = "topic")
+public class Topic {
+
+ @EsId
+ private Long id;
+ private Long subject;
+ private Long type;
+ private String img;
+ private String content;
+ private String contentStr;
+ private Long score;
+ private String audio;
+ private String video;
+ private Boolean disabled;
+ private Boolean deleted;
+ private String createdAt;
+ private String updatedAt;
+ private String answer;
+ private String three;
+ private String checkvalue;
+
+
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java
new file mode 100644
index 0000000..c70ca98
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/function/GFunction.java
@@ -0,0 +1,44 @@
+package com.ruoyi.biemo.elasticsearch.function;
+
+import lombok.SneakyThrows;
+
+import java.io.Serializable;
+import java.lang.invoke.SerializedLambda;
+import java.lang.reflect.Method;
+import java.util.function.Function;
+
+/**
+ * @author zcw
+ * @version 1.0
+ * @date 2021/1/14 13:50
+ */
+@FunctionalInterface
+public interface GFunction extends Function, Serializable {
+
+ String get = "get";
+
+ String is = "is";
+
+ @SneakyThrows
+ default SerializedLambda getSerializedLambda() {
+ Method write = this.getClass().getDeclaredMethod("writeReplace");
+ write.setAccessible(true);
+ return (SerializedLambda) write.invoke(this);
+ }
+
+ default String field() {
+ SerializedLambda serializedLambda = this.getSerializedLambda();
+ String methodName = serializedLambda.getImplMethodName();
+ return resolveFieldName(methodName);
+ }
+ default String resolveFieldName(String getMethodName) {
+ if (getMethodName.startsWith(get)) {
+ getMethodName = getMethodName.substring(3);
+ } else if (getMethodName.startsWith(is)) {
+ getMethodName = getMethodName.substring(2);
+ }
+ getMethodName = getMethodName.substring(0, 1).toLowerCase() + getMethodName.substring(1);
+ return getMethodName;
+ }
+
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java
new file mode 100644
index 0000000..6b092a9
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/service/TestService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.biemo.elasticsearch.service;
+
+import com.ruoyi.biemo.elasticsearch.entity.Topic;
+import com.ruoyi.biemo.elasticsearch.util.EsService;
+import org.elasticsearch.common.unit.Fuzziness;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author zcw
+ * @version 1.0
+ * @date 2021/1/14 11:59
+ */
+@Service
+public class TestService extends EsService {
+
+ public List test() {
+ esLambdaQuery().notIn(Topic::getId, 1, 2).delete();
+ List topics = esLambdaQuery().between(Topic::getId, 2, 3).query();
+ return topics;
+ }
+
+ public List match() {
+ return esLambdaQuery().fuzzyAll(Topic::getContent, Fuzziness.TWO, "abc").query();
+ }
+
+ public void delete() {
+ esLambdaQuery().eq(Topic::getId,1).delete();
+ }
+
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java
new file mode 100644
index 0000000..927a2b4
--- /dev/null
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/elasticsearch/util/EsService.java
@@ -0,0 +1,352 @@
+package com.ruoyi.biemo.elasticsearch.util;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.biemo.elasticsearch.annotation.EsId;
+import com.ruoyi.biemo.elasticsearch.function.GFunction;
+import lombok.Data;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.delete.DeleteRequest;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.common.unit.Fuzziness;
+import org.elasticsearch.common.xcontent.XContentType;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.reindex.DeleteByQueryRequest;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.sort.SortOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.elasticsearch.annotations.Document;
+
+import java.lang.reflect.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zcw
+ * @version 1.0
+ * @date 2021/1/14 10:47
+ */
+public abstract class EsService {
+
+ @Autowired
+ private RestHighLevelClient client;
+
+ private String index;
+
+ private Class entity;
+
+ private Method getId;
+
+ protected EsService() {
+ Type type = this.getClass().getGenericSuperclass();
+ ParameterizedType parameterizedType = (ParameterizedType) type;
+ Type[] t = parameterizedType.getActualTypeArguments();
+ this.entity = (Class) t[0];
+ if (this.entity.isAnnotationPresent(Document.class)) {
+ this.index = this.entity.getAnnotation(Document.class).indexName();
+ }
+ Field[] fields = this.entity.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.isAnnotationPresent(EsId.class)) {
+ String fieldName = field.getName();
+ String FieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
+ String methodName = GFunction.get + FieldName;
+ Method getMethod = null;
+ try {
+ getMethod = this.entity.getMethod(methodName, null);
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ }
+ this.getId = getMethod;
+ }
+ }
+ }
+
+ public boolean indexExist() throws Exception {
+ GetIndexRequest request = new GetIndexRequest(index);
+ request.local(false);
+ request.humanReadable(true);
+ request.includeDefaults(false);
+ return client.indices().exists(request, RequestOptions.DEFAULT);
+ }
+
+ public void insertOrUpdateOne(T entity) {
+ IndexRequest request = new IndexRequest(index);
+ try {
+ request.id(this.getId.invoke(entity, null).toString());
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ request.source(JSON.toJSONString(entity), XContentType.JSON);
+ try {
+ client.index(request, RequestOptions.DEFAULT);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void insertBatch(List list) {
+ BulkRequest request = new BulkRequest();
+ list.forEach(item -> {
+ try {
+ request.add(new IndexRequest(index).id(getId.invoke(item, null).toString())
+ .source(JSON.toJSONString(item), XContentType.JSON));
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ });
+ try {
+ client.bulk(request, RequestOptions.DEFAULT);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void deleteBatch(List idList) {
+ BulkRequest request = new BulkRequest();
+ idList.forEach(item -> request.add(new DeleteRequest(index, item.toString())));
+ try {
+ client.bulk(request, RequestOptions.DEFAULT);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public List search(SearchSourceBuilder builder) {
+ SearchRequest request = new SearchRequest(index);
+ request.source(builder);
+ try {
+ SearchResponse response = client.search(request, RequestOptions.DEFAULT);
+ SearchHit[] hits = response.getHits().getHits();
+ List res = new ArrayList<>(hits.length);
+ for (SearchHit hit : hits) {
+ res.add(JSON.parseObject(hit.getSourceAsString(), entity));
+ }
+ return res;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void deleteIndex() {
+ try {
+ client.indices().delete(new DeleteIndexRequest(index), RequestOptions.DEFAULT);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void deleteByQuery(QueryBuilder builder) {
+ DeleteByQueryRequest request = new DeleteByQueryRequest(index);
+ request.setQuery(builder);
+ request.setBatchSize(10000);
+ request.setConflicts("proceed");
+ try {
+ client.deleteByQuery(request, RequestOptions.DEFAULT);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected EsQueryBuilder esLambdaQuery() {
+ return new EsQueryBuilder();
+ }
+
+ @Data
+ protected class EsQueryBuilder {
+
+ private SearchSourceBuilder searchSourceBuilder;
+
+ private BoolQueryBuilder boolQueryBuilder;
+
+ private EsQueryBuilder() {
+ if (this.searchSourceBuilder == null) {
+ this.searchSourceBuilder = new SearchSourceBuilder();
+ }
+ if (this.boolQueryBuilder == null) {
+ this.boolQueryBuilder = QueryBuilders.boolQuery();
+ }
+ }
+
+ public EsQueryBuilder eq(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.termQuery(field, value));
+ this.boolQueryBuilder.filter(QueryBuilders.termQuery(field, value));
+ return this;
+ }
+
+ public EsQueryBuilder notEq(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(field, value)));
+ this.boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value));
+ return this;
+ }
+
+ public EsQueryBuilder in(GFunction extends T, Object> gFunction, Object... values) {
+ String field = gFunction.field();
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ for (Object value : values) {
+ boolQueryBuilder.should(QueryBuilders.termQuery(field, value));
+ this.boolQueryBuilder.should(QueryBuilders.termQuery(field, value));
+ }
+ this.searchSourceBuilder.postFilter(boolQueryBuilder);
+ return this;
+ }
+
+ public EsQueryBuilder notIn(GFunction extends T, Object> gFunction, Object... values) {
+ String field = gFunction.field();
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ for (Object value : values) {
+ boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value));
+ this.boolQueryBuilder.mustNot(QueryBuilders.termQuery(field, value));
+ }
+ this.searchSourceBuilder.postFilter(boolQueryBuilder);
+ return this;
+ }
+
+ public EsQueryBuilder between(GFunction extends T, Object> gFunction, Object begin, Object end) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(field).from(begin).to(end)));
+ this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).from(begin).to(end));
+ return this;
+ }
+
+ public EsQueryBuilder notBetween(GFunction extends T, Object> gFunction, Object begin, Object end) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.rangeQuery(field).from(begin).to(end)));
+ this.boolQueryBuilder.mustNot(QueryBuilders.rangeQuery(field).from(begin).to(end));
+ return this;
+ }
+
+ public EsQueryBuilder gt(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).gt(value));
+ this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).gt(value));
+ return this;
+ }
+
+ public EsQueryBuilder lt(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).lt(value));
+ this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).lt(value));
+ return this;
+ }
+
+ public EsQueryBuilder ge(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).gte(value));
+ this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).gte(value));
+ return this;
+ }
+
+ public EsQueryBuilder le(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.searchSourceBuilder.postFilter(QueryBuilders.rangeQuery(field).lte(value));
+ this.boolQueryBuilder.filter(QueryBuilders.rangeQuery(field).lte(value));
+ return this;
+ }
+
+ public EsQueryBuilder sort(GFunction extends T, Object> gFunction, SortOrder value) {
+ this.searchSourceBuilder.sort(gFunction.field(), value);
+ return this;
+ }
+
+ public EsQueryBuilder page(Integer pageNo, Integer pageSize) {
+ pageNo = (pageNo - 1) * pageSize;
+ this.searchSourceBuilder.from(pageNo).size(pageSize);
+ return this;
+ }
+
+ public EsQueryBuilder matchAll(GFunction extends T, Object> gFunction, Object... values) {
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ String field = gFunction.field();
+ for (Object value : values) {
+ boolQueryBuilder.filter(QueryBuilders.matchPhrasePrefixQuery(field, value));
+ this.boolQueryBuilder.filter(QueryBuilders.matchPhrasePrefixQuery(field, value));
+ }
+ this.searchSourceBuilder.postFilter(boolQueryBuilder);
+ return this;
+ }
+
+ public EsQueryBuilder matchOne(GFunction extends T, Object> gFunction, Object... values) {
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ String field = gFunction.field();
+ for (Object value : values) {
+ boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery(field, value));
+ this.boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery(field, value));
+ }
+ this.searchSourceBuilder.postFilter(boolQueryBuilder);
+ return this;
+ }
+
+ public EsQueryBuilder notMatch(GFunction extends T, Object> gFunction, Object value) {
+ String field = gFunction.field();
+ this.boolQueryBuilder.mustNot(QueryBuilders.matchPhrasePrefixQuery(field, value));
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.matchPhrasePrefixQuery(field, value)));
+ return this;
+ }
+
+ public EsQueryBuilder fuzzyAll(GFunction extends T, Object> gFunction, Fuzziness fuzziness, Object... values) {
+ String field = gFunction.field();
+ for (Object value : values) {
+ this.searchSourceBuilder.postFilter(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness));
+ this.boolQueryBuilder.filter(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness));
+ }
+ return this;
+ }
+
+ public EsQueryBuilder fuzzyOne(GFunction extends T, Object> gFunction, Fuzziness fuzziness, Object... values) {
+ String field = gFunction.field();
+ BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+ for (Object value : values) {
+ boolQueryBuilder.should(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness));
+ this.boolQueryBuilder.should(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness));
+ }
+ this.searchSourceBuilder.postFilter(boolQueryBuilder);
+ return this;
+ }
+
+ public EsQueryBuilder notFuzzy(GFunction extends T, Object> gFunction, Fuzziness fuzziness, Object value) {
+ String field = gFunction.field();
+ this.boolQueryBuilder.mustNot(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness));
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.fuzzyQuery(field, value).fuzziness(fuzziness)));
+ return this;
+ }
+
+ public EsQueryBuilder isNull(GFunction extends T, Object> gFunction) {
+ String field = gFunction.field();
+ this.boolQueryBuilder.filter(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(field)));
+ this.searchSourceBuilder.postFilter(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(field)));
+ return this;
+ }
+
+ public EsQueryBuilder isNotNull(GFunction extends T, Object> gFunction) {
+ String field = gFunction.field();
+ this.boolQueryBuilder.filter(QueryBuilders.existsQuery(field));
+ this.searchSourceBuilder.postFilter(QueryBuilders.existsQuery(field));
+ return this;
+ }
+
+ public List query() {
+ return search(this.searchSourceBuilder);
+ }
+
+ public void delete() {
+ deleteByQuery(this.boolQueryBuilder);
+ }
+
+ }
+
+}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java
index 9832135..960d489 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/MongoConverterConfig.java
@@ -1,36 +1,36 @@
-package com.ruoyi.biemo.mongodb.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.mongodb.MongoDatabaseFactory;
-import org.springframework.data.mongodb.core.convert.DbRefResolver;
-import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
-import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
-import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
-import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
-
-/**
- * 配置去掉_class字段
- *
- * @author 陈钇蒙
- *
- */
-@Configuration
-public class MongoConverterConfig {
- @Autowired
- private MongoDatabaseFactory mongoDatabaseFactory;
-
- @Autowired
- private MongoMappingContext mongoMappingContext;
-
- @Bean
- public MappingMongoConverter mappingMongoConverter() {
- DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
- MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
- // 此处是去除插入数据库的 _class 字段
- converter.setTypeMapper(new DefaultMongoTypeMapper(null));
-
- return converter;
- }
-}
+//package com.ruoyi.biemo.mongodb.config;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.data.mongodb.MongoDatabaseFactory;
+//import org.springframework.data.mongodb.core.convert.DbRefResolver;
+//import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
+//import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
+//import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
+//import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
+//
+///**
+// * 配置去掉_class字段
+// *
+// * @author 陈钇蒙
+// *
+// */
+//@Configuration
+//public class MongoConverterConfig {
+// @Autowired
+// private MongoDatabaseFactory mongoDatabaseFactory;
+//
+// @Autowired
+// private MongoMappingContext mongoMappingContext;
+//
+// @Bean
+// public MappingMongoConverter mappingMongoConverter() {
+// DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
+// MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
+// // 此处是去除插入数据库的 _class 字段
+// converter.setTypeMapper(new DefaultMongoTypeMapper(null));
+//
+// return converter;
+// }
+//}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java
index 7612ef9..35ae542 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/config/ScanNewField.java
@@ -1,120 +1,120 @@
-package com.ruoyi.biemo.mongodb.config;
-
-import java.lang.reflect.Field;
-import java.util.Set;
-
-import javax.annotation.PostConstruct;
-
-import com.ruoyi.biemo.mongodb.bean.IgnoreDocument;
-import com.ruoyi.biemo.mongodb.bean.InitValue;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.index.IndexOperations;
-import org.springframework.data.mongodb.core.index.IndexResolver;
-import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver;
-import org.springframework.data.mongodb.core.mapping.Document;
-import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.data.mongodb.core.query.Update;
-import org.springframework.stereotype.Service;
-
-import com.mongodb.client.result.UpdateResult;
-
-import com.ruoyi.biemo.mongodb.utils.PackageUtil;
-import cn.hutool.core.util.ClassUtil;
-import cn.hutool.core.util.ReflectUtil;
-
-/**
- * 启动时将表初始化
- *
- */
-@Service
-public class ScanNewField {
- @Autowired
- PackageUtil packageUtil;
- // 写链接(写到主库,可使用事务)
- @Autowired
- private MongoTemplate mongoTemplate;
-
- @Autowired
- MongoMappingContext mongoMappingContext;
-
- @PostConstruct
- public void scan() {
- // 找到主程序包
- Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage());
- for (Class> clazz : set) {
- IgnoreDocument ignoreDocument = clazz.getAnnotation(IgnoreDocument.class);
- if (ignoreDocument != null) {
- continue;
- }
-
- Document document = clazz.getAnnotation(Document.class);
- if (document == null) {
- continue;
- }
-
- // 创建表
- if (!mongoTemplate.collectionExists(clazz)) {
- mongoTemplate.createCollection(clazz);
- System.out.println("创建了" + clazz.getSimpleName() + "表");
- }
-
- // 创建索引
- IndexOperations indexOps = mongoTemplate.indexOps(clazz);
- IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext);
- resolver.resolveIndexFor(clazz).forEach(indexOps::ensureIndex);
-
- Field[] fields = ReflectUtil.getFields(clazz);
- for (Field field : fields) {
- // 获取注解
- if (field.isAnnotationPresent(InitValue.class)) {
- InitValue initValue = field.getAnnotation(InitValue.class);
- if (initValue.value() != null) {
-
- // 更新表默认值
- Query query = new Query();
- query.addCriteria(Criteria.where(field.getName()).is(null));
-
- Long count = mongoTemplate.count(query, clazz);
- if (count > 0) {
- Object value = null;
- Class> type = field.getType();
-
- if (type.equals(String.class)) {
- value = initValue.value();
- }
- if (type.equals(Short.class)) {
- value = Short.parseShort(initValue.value());
- }
- if (type.equals(Integer.class)) {
- value = Integer.parseInt(initValue.value());
- }
- if (type.equals(Long.class)) {
- value = Long.parseLong(initValue.value());
- }
- if (type.equals(Float.class)) {
- value = Float.parseFloat(initValue.value());
- }
- if (type.equals(Double.class)) {
- value = Double.parseDouble(initValue.value());
- }
- if (type.equals(Boolean.class)) {
- value = Boolean.parseBoolean(initValue.value());
- }
-
- Update update = new Update().set(field.getName(), value);
- UpdateResult updateResult = mongoTemplate.updateMulti(query, update, clazz);
-
- System.out.println(clazz.getSimpleName() + "表更新了" + updateResult.getModifiedCount() + "条默认值");
- }
- }
- }
-
- }
-
- }
- }
-
-}
+//package com.ruoyi.biemo.mongodb.config;
+//
+//import java.lang.reflect.Field;
+//import java.util.Set;
+//
+//import javax.annotation.PostConstruct;
+//
+//import com.ruoyi.biemo.mongodb.bean.IgnoreDocument;
+//import com.ruoyi.biemo.mongodb.bean.InitValue;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.data.mongodb.core.MongoTemplate;
+//import org.springframework.data.mongodb.core.index.IndexOperations;
+//import org.springframework.data.mongodb.core.index.IndexResolver;
+//import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver;
+//import org.springframework.data.mongodb.core.mapping.Document;
+//import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
+//import org.springframework.data.mongodb.core.query.Criteria;
+//import org.springframework.data.mongodb.core.query.Query;
+//import org.springframework.data.mongodb.core.query.Update;
+//import org.springframework.stereotype.Service;
+//
+//import com.mongodb.client.result.UpdateResult;
+//
+//import com.ruoyi.biemo.mongodb.utils.PackageUtil;
+//import cn.hutool.core.util.ClassUtil;
+//import cn.hutool.core.util.ReflectUtil;
+//
+///**
+// * 启动时将表初始化
+// *
+// */
+//@Service
+//public class ScanNewField {
+// @Autowired
+// PackageUtil packageUtil;
+// // 写链接(写到主库,可使用事务)
+// @Autowired
+// private MongoTemplate mongoTemplate;
+//
+// @Autowired
+// MongoMappingContext mongoMappingContext;
+//
+// @PostConstruct
+// public void scan() {
+// // 找到主程序包
+// Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage());
+// for (Class> clazz : set) {
+// IgnoreDocument ignoreDocument = clazz.getAnnotation(IgnoreDocument.class);
+// if (ignoreDocument != null) {
+// continue;
+// }
+//
+// Document document = clazz.getAnnotation(Document.class);
+// if (document == null) {
+// continue;
+// }
+//
+// // 创建表
+// if (!mongoTemplate.collectionExists(clazz)) {
+// mongoTemplate.createCollection(clazz);
+// System.out.println("创建了" + clazz.getSimpleName() + "表");
+// }
+//
+// // 创建索引
+// IndexOperations indexOps = mongoTemplate.indexOps(clazz);
+// IndexResolver resolver = new MongoPersistentEntityIndexResolver(mongoMappingContext);
+// resolver.resolveIndexFor(clazz).forEach(indexOps::ensureIndex);
+//
+// Field[] fields = ReflectUtil.getFields(clazz);
+// for (Field field : fields) {
+// // 获取注解
+// if (field.isAnnotationPresent(InitValue.class)) {
+// InitValue initValue = field.getAnnotation(InitValue.class);
+// if (initValue.value() != null) {
+//
+// // 更新表默认值
+// Query query = new Query();
+// query.addCriteria(Criteria.where(field.getName()).is(null));
+//
+// Long count = mongoTemplate.count(query, clazz);
+// if (count > 0) {
+// Object value = null;
+// Class> type = field.getType();
+//
+// if (type.equals(String.class)) {
+// value = initValue.value();
+// }
+// if (type.equals(Short.class)) {
+// value = Short.parseShort(initValue.value());
+// }
+// if (type.equals(Integer.class)) {
+// value = Integer.parseInt(initValue.value());
+// }
+// if (type.equals(Long.class)) {
+// value = Long.parseLong(initValue.value());
+// }
+// if (type.equals(Float.class)) {
+// value = Float.parseFloat(initValue.value());
+// }
+// if (type.equals(Double.class)) {
+// value = Double.parseDouble(initValue.value());
+// }
+// if (type.equals(Boolean.class)) {
+// value = Boolean.parseBoolean(initValue.value());
+// }
+//
+// Update update = new Update().set(field.getName(), value);
+// UpdateResult updateResult = mongoTemplate.updateMulti(query, update, clazz);
+//
+// System.out.println(clazz.getSimpleName() + "表更新了" + updateResult.getModifiedCount() + "条默认值");
+// }
+// }
+// }
+//
+// }
+//
+// }
+// }
+//
+//}
diff --git a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java
index 1309f97..c022292 100644
--- a/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java
+++ b/ruoyi-biemo/src/main/java/com/ruoyi/biemo/mongodb/utils/ImportExportUtil.java
@@ -1,137 +1,137 @@
-package com.ruoyi.biemo.mongodb.utils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import com.ruoyi.biemo.mongodb.bean.Page;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.ApplicationContext;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.mapping.Document;
-import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
-import org.springframework.stereotype.Service;
-
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.ClassUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.core.util.ZipUtil;
-import cn.hutool.json.JSONArray;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-
-/**
- * 数据库导入导出工具
- *
- */
-@Service
-public class ImportExportUtil {
- // 写链接(写到主库,可使用事务)
- @Autowired
- private MongoTemplate mongoTemplate;
-
- @Autowired
- private MongoHelper mongoHelper;
-
- @Autowired
- PackageUtil packageUtil;
- public void exportDb(String path) {
- path = path.replace(".zip", "");
- FileUtil.del(path);
- FileUtil.del(path + ".zip");
- try {
-
- // 找到主程序包
- Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage());
- Page page = new Page();
- page.setLimit(1000);
-
- for (Class> clazz : set) {
- Document document = clazz.getAnnotation(Document.class);
- if (document == null) {
- continue;
- }
-
- page.setCurr(1);
- while (true) {
- page = mongoHelper.findPage(page, clazz);
- if (page.getList().size() == 0) {
- break;
- }
-
- List lines = new ArrayList();
- for (Object object : page.getList()) {
- lines.add(JSONUtil.toJsonStr(object));
- }
- FileUtil.appendLines(lines, path + File.separator + clazz.getSimpleName() + ".json", "UTF-8");
- System.out.println(clazz.getSimpleName() + "表导出了" + page.getList().size() + "条数据");
- page.setCurr(page.getCurr() + 1);
- }
- }
- ZipUtil.zip(path);
-
- } catch (Exception e) {
- e.printStackTrace();
- FileUtil.del(path + ".zip");
- }
-
- FileUtil.del(path);
- }
-
- public void importDb(String path) {
- if (!FileUtil.exist(path)) {
- System.out.println(path + "文件不存在");
- return;
- }
- BufferedReader reader = null;
-
- path = path.replace(".zip", "");
- FileUtil.del(path);
- ZipUtil.unzip(path + ".zip");
- try {
-
- // 找到主程序包
- Set> set = ClassUtil.scanPackage(packageUtil.getMainPackage());
- for (Class> clazz : set) {
- Document document = clazz.getAnnotation(Document.class);
- if (document == null) {
- continue;
- }
-
- File file = new File(path + File.separator + clazz.getSimpleName() + ".json");
- if (file.exists()) {
- mongoTemplate.dropCollection(clazz);
-
- reader = FileUtil.getReader(file, "UTF-8");
- List