TranslateService.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. package cn.cslg.pas.service.common;
  2. import cn.cslg.pas.common.dto.PatentColumnDTO;
  3. import cn.cslg.pas.common.dto.TranslateDTO;
  4. import cn.cslg.pas.common.dto.business.SelectClaimDTO;
  5. import cn.cslg.pas.common.dto.es.EsTranslateDTO;
  6. import cn.cslg.pas.common.utils.ClaimUtils.ClaimSplitUtils;
  7. import cn.cslg.pas.common.vo.EsExplainTextVO;
  8. import cn.cslg.pas.common.vo.PatentRightParams;
  9. import cn.cslg.pas.common.vo.RePatentClaim;
  10. import cn.cslg.pas.common.vo.TranslateVO;
  11. import cn.cslg.pas.domain.es.Content;
  12. import cn.cslg.pas.domain.es.Patent;
  13. import cn.cslg.pas.domain.es.PatentTranslate;
  14. import cn.cslg.pas.domain.es.Text;
  15. import cn.cslg.pas.exception.XiaoShiException;
  16. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  17. import co.elastic.clients.elasticsearch._types.InlineScript;
  18. import co.elastic.clients.elasticsearch._types.Script;
  19. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  20. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  21. import co.elastic.clients.elasticsearch.core.IndexResponse;
  22. import co.elastic.clients.elasticsearch.core.SearchRequest;
  23. import co.elastic.clients.elasticsearch.core.SearchResponse;
  24. import co.elastic.clients.elasticsearch.core.UpdateByQueryRequest;
  25. import co.elastic.clients.elasticsearch.core.search.Hit;
  26. import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
  27. import com.aliyun.tea.TeaException;
  28. import lombok.RequiredArgsConstructor;
  29. import org.apache.commons.lang3.ObjectUtils;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.context.annotation.Lazy;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.util.CollectionUtils;
  35. import java.io.IOException;
  36. import java.util.*;
  37. import java.util.stream.Collectors;
  38. @Service
  39. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  40. public class TranslateService {
  41. private final ElasticsearchClient client;
  42. //---------------------外部翻译接口------------------------
  43. public static com.aliyun.alimt20181012.Client createClient() throws Exception {
  44. String key = "LTAI5tGyG1Q7fKprgg1nWhXj";
  45. String sercet = "Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN";
  46. // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  47. // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
  48. com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
  49. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
  50. .setAccessKeyId(key)
  51. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  52. .setAccessKeySecret(sercet);
  53. // Endpoint 请参考 https://api.aliyun.com/product/alimt
  54. config.endpoint = "mt.aliyuncs.com";
  55. return new com.aliyun.alimt20181012.Client(config);
  56. }
  57. public String getTranslateContent(String content) throws Exception {
  58. com.aliyun.alimt20181012.Client client = TranslateService.createClient();
  59. com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
  60. .setFormatType("text")
  61. .setSourceLanguage("auto")
  62. .setTargetLanguage("zh")
  63. .setSourceText(content)
  64. .setScene("general");
  65. com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
  66. try {
  67. // 复制代码运行请自行打印 API 的返回值
  68. TranslateGeneralResponse translateGeneralResponse = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
  69. String re = translateGeneralResponse.getBody().getData().translated;
  70. return re;
  71. } catch (TeaException error) {
  72. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  73. // 错误 message
  74. System.out.println(error.getMessage());
  75. // 诊断地址
  76. System.out.println(error.getData().get("Recommend"));
  77. com.aliyun.teautil.Common.assertAsString(error.message);
  78. } catch (Exception _error) {
  79. TeaException error = new TeaException(_error.getMessage(), _error);
  80. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  81. // 错误 message
  82. System.out.println(error.getMessage());
  83. // 诊断地址
  84. System.out.println(error.getData().get("Recommend"));
  85. com.aliyun.teautil.Common.assertAsString(error.message);
  86. }
  87. return "";
  88. }
  89. //根据专利号获取专利信息
  90. public PatentColumnDTO getPatentByPatentNo(String patentNo) throws IOException {
  91. PatentColumnDTO patentColumnDTO = new PatentColumnDTO();
  92. SearchRequest.Builder builder = new SearchRequest.Builder();
  93. //设置查询索引
  94. builder.index("patent");
  95. Query query = QueryBuilders.term(t -> t.field("patent_no.keyword").value(patentNo));
  96. builder.query(query);
  97. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  98. List<Hit<Patent>> hits = response.hits().hits();
  99. for (Hit<Patent> hit : hits) {
  100. Patent patent = hit.source();
  101. BeanUtils.copyProperties(patent, patentColumnDTO);
  102. }
  103. return patentColumnDTO;
  104. }
  105. //根据专利号、字段栏位、序号获取专利翻译信息
  106. public List<EsTranslateDTO> getPatentTranslateByPatentNo(TranslateDTO vo) throws IOException {
  107. String patentNo = vo.getPatentNo();
  108. String patentField = vo.getPatentField();
  109. Integer order = vo.getOrder();
  110. SearchRequest.Builder builder = new SearchRequest.Builder();
  111. //设置查询索引
  112. builder.index("translate");
  113. Query q1 = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
  114. Query q2 = QueryBuilders.term(t -> t.field("patent_field").value(patentField));
  115. Query bool = null;
  116. if (order != null && (patentField.equals("3") || patentField.equals("4"))) {
  117. Query q3 = QueryBuilders.term(t -> t.field("content.order").value(order));
  118. bool = QueryBuilders.bool(i -> i.must(q1, q2, q3));
  119. } else {
  120. bool = QueryBuilders.bool(i -> i.must(q1, q2));
  121. }
  122. builder.query(bool);
  123. builder.size(1000);
  124. builder.trackTotalHits(i -> i.enabled(true));
  125. SearchResponse<PatentTranslate> response = client.search(builder.build(), PatentTranslate.class);
  126. List<Hit<PatentTranslate>> hits = response.hits().hits();
  127. List<EsTranslateDTO> translateDTOS = new ArrayList<>();
  128. for (Hit<PatentTranslate> hit : hits) {
  129. PatentTranslate translate = hit.source();
  130. EsTranslateDTO translateDTO = new EsTranslateDTO();
  131. BeanUtils.copyProperties(translate, translateDTO);
  132. translateDTOS.add(translateDTO);
  133. }
  134. return translateDTOS;
  135. }
  136. //添加
  137. public String addPatentTranslate(PatentTranslate translate) throws Exception {
  138. IndexResponse indexResponse = client.index(i -> i
  139. .index("translate")
  140. //传入user对象
  141. .document(translate)
  142. );
  143. return indexResponse.id();
  144. }
  145. //封装添加参数
  146. public String loadingTranslate(String patentNo, String patentField,String language,Boolean ifOrigin,Integer order,String parentSort,String textContent) throws Exception {
  147. PatentTranslate translate = new PatentTranslate();
  148. translate.setLanguage(language);
  149. translate.setPatentNo(patentNo);
  150. translate.setPatentField(patentField);
  151. translate.setIfOrigin(ifOrigin);
  152. Content content = new Content();
  153. content.setOrder(order);
  154. content.setParentSort(parentSort);
  155. content.setTextContent(textContent);
  156. translate.setContent(content);
  157. return this.addPatentTranslate(translate);
  158. }
  159. //添加标题、摘要原/译文
  160. public Integer addTranslate(Text text, String patentNo,String patentField) throws Exception {
  161. int i = 0;
  162. String textContent = text.getTextContent();
  163. //原文
  164. String s = this.loadingTranslate(patentNo, patentField, text.getLanguage(), true, 0, "-1", textContent);
  165. if (StringUtils.isNotEmpty(s)) {
  166. i += 1;
  167. }
  168. //译文
  169. String translateContent = this.getTranslateContent(textContent);
  170. String s1 = this.loadingTranslate(patentNo, patentField, "CN", false, 0, "-1", translateContent);
  171. if (StringUtils.isNotEmpty(s1)) {
  172. i += 1;
  173. }
  174. return i;
  175. }
  176. //------------------------------------返回翻译内容--------------------------
  177. /**
  178. * 根据标题和摘要获取翻译内容
  179. *
  180. * @param vo
  181. * @return
  182. */
  183. public TranslateVO getTranslateByTIAndAb(TranslateDTO vo) throws Exception {
  184. String patentNo = vo.getPatentNo();
  185. String patentField = vo.getPatentField();
  186. TranslateVO translateVO = new TranslateVO();
  187. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  188. if (CollectionUtils.isEmpty(translateDTOS)) {
  189. PatentColumnDTO columnDTO = this.getPatentByPatentNo(patentNo);
  190. if (patentField.equals("1")) {
  191. List<Text> title = columnDTO.getTitle();
  192. if (!CollectionUtils.isEmpty(title)) {
  193. Text titleText = title.get(0);
  194. Integer translateNum = this.addTranslate(titleText, patentNo,patentField);
  195. if (translateNum < 1) {
  196. throw new XiaoShiException("添加标题翻译失败");
  197. }
  198. }
  199. } else if (patentField.equals("2")) {
  200. List<Text> abstractStr = columnDTO.getAbstractStr();
  201. if (!CollectionUtils.isEmpty(abstractStr)) {
  202. Text abstractText = abstractStr.get(0);
  203. Integer translateNum = this.addTranslate(abstractText, patentNo,patentField);
  204. if (translateNum < 1) {
  205. throw new XiaoShiException("添加摘要翻译失败");
  206. }
  207. }
  208. }
  209. try {
  210. Thread.sleep(800);
  211. } catch (InterruptedException e) {
  212. Thread.currentThread().interrupt();
  213. }
  214. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  215. translateVO = this.loadTIAndAbTranslate(translateDTOS);
  216. } else {
  217. translateVO = this.loadTIAndAbTranslate(translateDTOS);
  218. }
  219. return translateVO;
  220. }
  221. //加载标题、摘要的翻译返回内容
  222. public TranslateVO loadTIAndAbTranslate(List<EsTranslateDTO> translateDTOS) {
  223. TranslateVO translateVO = new TranslateVO();
  224. List<EsTranslateDTO> tList = translateDTOS.stream().filter(EsTranslateDTO::getIfOrigin).collect(Collectors.toList());
  225. if (!CollectionUtils.isEmpty(tList)) {
  226. EsTranslateDTO translateDTO = tList.get(0);
  227. translateVO.setOriginalContent(translateDTO.getContent().getTextContent());
  228. }
  229. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  230. if (!CollectionUtils.isEmpty(fList)) {
  231. EsTranslateDTO translateDTO = fList.get(0);
  232. translateVO.setPatentNo(translateDTO.getPatentNo());
  233. translateVO.setPatentField(translateDTO.getPatentField());
  234. translateVO.setLanguage(translateDTO.getLanguage());
  235. translateVO.setTranslationContent(translateDTO.getContent().getTextContent());
  236. }
  237. return translateVO;
  238. }
  239. /**
  240. * 根据权利要求获取翻译内容
  241. *
  242. * @param vo
  243. * @return
  244. */
  245. public List<TranslateVO> getTranslate(TranslateDTO vo) throws Exception {
  246. List<TranslateVO> translateVOS = new ArrayList<>();
  247. String patentNo = vo.getPatentNo();
  248. String patentField = vo.getPatentField();
  249. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  250. if (CollectionUtils.isEmpty(translateDTOS)) {
  251. PatentColumnDTO columnDTO = this.getPatentByPatentNo(patentNo);
  252. if (patentField.equals("3")) {
  253. List<Text> claim = columnDTO.getClaim();
  254. this.addOldClaimTranslate(claim, patentNo, patentField);
  255. } else if (patentField.equals("4")) {
  256. List<Text> explainText = columnDTO.getPublicFullText();
  257. this.addOldPFTTranslate(explainText, patentNo, patentField);
  258. }
  259. try {
  260. Thread.sleep(800);
  261. } catch (InterruptedException e) {
  262. Thread.currentThread().interrupt();
  263. }
  264. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  265. translateVOS = this.loadTranslate(translateDTOS);
  266. } else {
  267. translateVOS = this.loadTranslate(translateDTOS);
  268. }
  269. return translateVOS;
  270. }
  271. /**
  272. * 添加权利要求原文
  273. * @param claim
  274. * @param patentNo
  275. * @param patentField
  276. * @throws Exception
  277. */
  278. public void addOldClaimTranslate(List<Text> claim, String patentNo, String patentField) throws Exception {
  279. if (!CollectionUtils.isEmpty(claim)) {
  280. int i = 0;
  281. List<Text> tList = claim.stream().filter(Text::getIfOrigin).collect(Collectors.toList());
  282. if (!CollectionUtils.isEmpty(tList)) {
  283. Text text = tList.get(0);
  284. PatentRightParams params = new PatentRightParams();
  285. params.setContent(text.getTextContent());
  286. params.setCountry(text.getLanguage());
  287. List<RePatentClaim> rePatentClaims = ClaimSplitUtils.formatPatentRight(params);
  288. for (RePatentClaim rePatentClaim : rePatentClaims) {
  289. if (rePatentClaim.getContent().contains("&nbsp;")) {
  290. String replace = rePatentClaim.getContent().replace("&nbsp;", " ");
  291. rePatentClaim.setContent(replace);
  292. }
  293. //原文
  294. String s = this.loadingTranslate(patentNo, patentField, text.getLanguage(), true,
  295. rePatentClaim.getSort(), rePatentClaim.getParentSort(), rePatentClaim.getContent());
  296. if (StringUtils.isNotEmpty(s)) {
  297. i += 1;
  298. }
  299. }
  300. if (i < 1) {
  301. throw new XiaoShiException("添加权利要求原文失败");
  302. }
  303. }
  304. }
  305. }
  306. /**
  307. * 添加原文说明书
  308. * @param text
  309. * @param patentNo
  310. * @param patentField
  311. * @throws Exception
  312. */
  313. public void addOldPFTTranslate(List<Text> text, String patentNo, String patentField) throws Exception {
  314. if (!CollectionUtils.isEmpty(text)) {
  315. int i = 0;
  316. List<EsExplainTextVO> explainTextVOS = this.splitPatentExplainText(text);
  317. for (EsExplainTextVO explainTextVO : explainTextVOS) {
  318. //原文
  319. String s = this.loadingTranslate(patentNo, patentField, explainTextVO.getLanguage(), explainTextVO.getIfOrigin(),
  320. explainTextVO.getSort(), "-1", explainTextVO.getContent());
  321. if (StringUtils.isNotEmpty(s)) {
  322. i += 1;
  323. }
  324. }
  325. if (i < 1) {
  326. throw new XiaoShiException("添加说明书原文失败");
  327. }
  328. }
  329. }
  330. //封装说明书、权利要求数据
  331. public List<TranslateVO> loadTranslate(List<EsTranslateDTO> translateDTOS) {
  332. List<TranslateVO> VOS = new ArrayList<>();
  333. if (!CollectionUtils.isEmpty(translateDTOS)) {
  334. List<TranslateVO> list = new ArrayList<>();
  335. List<TranslateVO> tVOS = new ArrayList<>();
  336. List<EsTranslateDTO> tList = translateDTOS.stream().filter(EsTranslateDTO::getIfOrigin).collect(Collectors.toList());
  337. for (EsTranslateDTO translateDTO : tList) {
  338. Content content = translateDTO.getContent();
  339. TranslateVO translateVO = new TranslateVO();
  340. translateVO.setPatentNo(translateDTO.getPatentNo());
  341. translateVO.setLanguage(translateDTO.getLanguage());
  342. translateVO.setPatentField(translateDTO.getPatentField());
  343. translateVO.setOrder(content.getOrder());
  344. translateVO.setOriginalContent(content.getTextContent());
  345. translateVO.setParentSort(content.getParentSort());
  346. tVOS.add(translateVO);
  347. }
  348. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  349. if (!CollectionUtils.isEmpty(fList)) {
  350. List<TranslateVO> fVOS = new ArrayList<>();
  351. for (EsTranslateDTO translateDTO : fList) {
  352. Content content = translateDTO.getContent();
  353. TranslateVO translateVO = new TranslateVO();
  354. translateVO.setPatentNo(translateDTO.getPatentNo());
  355. translateVO.setLanguage(translateDTO.getLanguage());
  356. translateVO.setPatentField(translateDTO.getPatentField());
  357. translateVO.setOrder(content.getOrder());
  358. translateVO.setTranslationContent(content.getTextContent());
  359. translateVO.setParentSort(content.getParentSort());
  360. fVOS.add(translateVO);
  361. }
  362. Map<Integer, TranslateVO> fVOMap = new HashMap<>();
  363. for (TranslateVO fVO : fVOS) {
  364. fVOMap.put(fVO.getOrder(), fVO);
  365. }
  366. for (TranslateVO tVO : tVOS) {
  367. TranslateVO fVO = fVOMap.get(tVO.getOrder());
  368. if (fVO != null) {
  369. TranslateVO translateVO = new TranslateVO();
  370. translateVO.setPatentNo(tVO.getPatentNo());
  371. translateVO.setLanguage(tVO.getLanguage());
  372. translateVO.setPatentField(tVO.getPatentField());
  373. translateVO.setOriginalContent(tVO.getOriginalContent());
  374. translateVO.setParentSort(tVO.getParentSort());
  375. translateVO.setOrder(tVO.getOrder());
  376. translateVO.setTranslationContent(fVO.getTranslationContent());
  377. list.add(translateVO);
  378. } else {
  379. list.add(tVO);
  380. }
  381. }
  382. } else {
  383. list.addAll(tVOS);
  384. }
  385. List<TranslateVO> translateVOS = list.stream().sorted(Comparator.comparing(TranslateVO::getOrder)).collect(Collectors.toList());
  386. VOS.addAll(translateVOS);
  387. }
  388. return VOS;
  389. }
  390. public List<TranslateVO> getTranslateOrder(TranslateDTO vo) throws Exception {
  391. List<TranslateVO> translateVOS = new ArrayList<>();
  392. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  393. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  394. if (!CollectionUtils.isEmpty(translateDTOS) && CollectionUtils.isEmpty(fList)) {
  395. int i = 0;
  396. for (EsTranslateDTO translateDTO : translateDTOS) {
  397. Content content = translateDTO.getContent();
  398. String translateContent = this.getTranslateContent(content.getTextContent());
  399. String s = this.loadingTranslate(translateDTO.getPatentNo(), translateDTO.getPatentField(), "CN", false,
  400. content.getOrder(), content.getParentSort(), translateContent);
  401. if (StringUtils.isNotEmpty(s)) {
  402. i++;
  403. }
  404. }
  405. if (i < 1) {
  406. throw new XiaoShiException("添加译文失败");
  407. }
  408. try {
  409. Thread.sleep(1000);
  410. } catch (InterruptedException e) {
  411. Thread.currentThread().interrupt();
  412. }
  413. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  414. translateVOS = this.loadTranslate(translateDTOS);
  415. } else {
  416. translateVOS = this.loadTranslate(translateDTOS);
  417. }
  418. return translateVOS;
  419. }
  420. /**
  421. * 根据文本获取翻译内容
  422. *
  423. * @param vo
  424. * @return
  425. */
  426. public TranslateVO getTranslateByText(TranslateDTO vo) throws Exception {
  427. String translateContent = this.getTranslateContent(vo.getContent());
  428. TranslateVO translateVO = new TranslateVO();
  429. translateVO.setOriginalContent(vo.getContent());
  430. translateVO.setTranslationContent(translateContent);
  431. return translateVO;
  432. }
  433. //拆分说明书
  434. public List<EsExplainTextVO> splitPatentExplainText(List<Text> list) {
  435. List<EsExplainTextVO> explainTextVOS = new ArrayList<>();
  436. List<Text> collect = list.stream().filter(Text::getIfOrigin).collect(Collectors.toList());
  437. if (!CollectionUtils.isEmpty(collect)) {
  438. Text text = collect.get(0);
  439. int j = 0;
  440. String content = text.getTextContent();
  441. String[] split = content.split("(\r\n){1,}");
  442. for (String s1 : split) {
  443. if (StringUtils.isNotEmpty(s1) && !s1.equals(" ")) {
  444. EsExplainTextVO textVO = new EsExplainTextVO();
  445. textVO.setSort(j);
  446. textVO.setContent(s1);
  447. textVO.setLanguage(text.getLanguage());
  448. textVO.setIfOrigin(text.getIfOrigin());
  449. explainTextVOS.add(textVO);
  450. j++;
  451. }
  452. }
  453. }
  454. return explainTextVOS;
  455. }
  456. public List<String> getTranslateOrder(String patentNo, Integer sort) throws IOException {
  457. List<String> list = new ArrayList<>();
  458. SearchRequest.Builder builder = new SearchRequest.Builder();
  459. //设置查询索引
  460. builder.index("translate");
  461. Query q1 = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
  462. Query q2 = QueryBuilders.term(t -> t.field("patent_field").value("3"));
  463. Query q3 = QueryBuilders.term(t -> t.field("content.order").value(sort));
  464. Query q4 = QueryBuilders.term(i -> i.field("language").value("CN"));
  465. Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3,q4));
  466. builder.query(bool);
  467. builder.size(1000);
  468. builder.trackTotalHits(i -> i.enabled(true));
  469. SearchResponse<PatentTranslate> response = client.search(builder.build(), PatentTranslate.class);
  470. List<Hit<PatentTranslate>> hits = response.hits().hits();
  471. for (Hit<PatentTranslate> hit : hits) {
  472. PatentTranslate source = hit.source();
  473. String content = source.getContent().getTextContent();
  474. if (StringUtils.isNotEmpty(content)) {
  475. list.add(content);
  476. }
  477. }
  478. return list;
  479. }
  480. }