提交 862304bd 作者: ChenShiQiang

search

上级 d140b349
......@@ -20,13 +20,12 @@ import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -56,7 +55,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
private ProduceInfo produceInfo;
@Override
public void addKnowledge(HttpServletRequest httpServletRequest,Knowledge knowledge) {
public void addKnowledge(HttpServletRequest httpServletRequest, Knowledge knowledge) {
if (null == knowledge.getId()) {
knowledge.setId(codeGenerateUtil.geneIdNo(Constants.FINANCE, 8));
......@@ -72,17 +71,17 @@ class KnowledgeServiceImpl implements IKnowledgeService {
.filePath("C:/bbb.docx")
.build());
knowledge.setFiles(knowFileList);
List<Content> contentList=new ArrayList<>();
List<Content> contentList = new ArrayList<>();
List<String> contentStringList = new ArrayList<>();
String html = null;
try {
html = DocUtil.docParseHtml(knowledge.getFiles().get(0).getFilePath());
html = DocUtil.docParseHtml(knowledge.getFiles().get(0).getFilePath());
String htmlWithTable = html.replace("<p>", "");
contentStringList = Arrays.asList(htmlWithTable.split("</p>"));
} catch (IOException e) {
e.printStackTrace();
}
if(!contentStringList.isEmpty()){
if (!contentStringList.isEmpty()) {
knowledge.setTitle(contentStringList.get(0));
for (String s : contentStringList) {
contentList.add(Content.builder()
......@@ -94,22 +93,22 @@ class KnowledgeServiceImpl implements IKnowledgeService {
knowledge.setContents(contentList);
esOpUtil.docSavaByEntity(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), knowledge);
KnowledgeMessage knowledgeMessage= new KnowledgeMessage();
KnowledgeMessage knowledgeMessage = new KnowledgeMessage();
BeanUtils.copyProperties( knowledge,knowledgeMessage);
BeanUtils.copyProperties(knowledge, knowledgeMessage);
// CleanerProperties props = new CleanerProperties();
// props.setPruneTags("table");
// String htmlWithoutTable = new HtmlCleaner(props).clean(html).getText().toString();
// htmlWithoutTable = htmlWithoutTable.replace("<p>", "");
// List<String>contentStringWithoutTableList = Arrays.asList(htmlWithoutTable.split("</p>"));
List<Content> messageContentList=contentList.stream()
.filter(item->item.getContent().length()>10)
.filter(item->!item.getContent().contains("<img"))
.filter(item->!item.getContent().contains("<table"))
.filter(item->!item.getContent().contains("<tr>"))
.filter(item->!item.getContent().contains("</tr>"))
.filter(item->!item.getContent().contains("<td>"))
.filter(item->!item.getContent().contains("</td>"))
List<Content> messageContentList = contentList.stream()
.filter(item -> item.getContent().length() > 10)
.filter(item -> !item.getContent().contains("<img"))
.filter(item -> !item.getContent().contains("<table"))
.filter(item -> !item.getContent().contains("<tr>"))
.filter(item -> !item.getContent().contains("</tr>"))
.filter(item -> !item.getContent().contains("<td>"))
.filter(item -> !item.getContent().contains("</td>"))
.collect(Collectors.toList());
knowledgeMessage.setContents(messageContentList);
produceInfo.sendKnowledgeContents(knowledgeMessage);
......@@ -160,8 +159,57 @@ class KnowledgeServiceImpl implements IKnowledgeService {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (StringUtils.isNotEmpty(knowledgeParam.getTitle())) {
boolQuery.must(QueryBuilders.matchPhraseQuery("title", knowledgeParam.getTitle()));
// if (StringUtils.isNotEmpty(knowledgeParam.getTitle())) {
// boolQuery.must(QueryBuilders.matchPhraseQuery("title", knowledgeParam.getTitle()));
// }
// if (StringUtils.isNotEmpty(knowledgeParam.getContent())) {
// BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
// nestedBoolQueryBuilder.must(QueryBuilders.matchPhraseQuery("contents.content", knowledgeParam.getContent()));
// NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
// boolQuery.must(nestedQueryBuilder);
// }
//搜索条件
if (StringUtils.isNotBlank(knowledgeParam.getSearchInfo())) {
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(knowledgeParam.getSearchInfo());
if ("精确".equals(knowledgeParam.getSearchAccuracy())) {
multiMatchQueryBuilder.type(MultiMatchQueryBuilder.Type.PHRASE);
if (null != knowledgeParam.getSearchScope() && Integer.valueOf(1).equals(knowledgeParam.getSearchScope())) {
multiMatchQueryBuilder.field("title");
} else if (null != knowledgeParam.getSearchScope() && Integer.valueOf(2).equals(knowledgeParam.getSearchScope())) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content");
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
} else {
multiMatchQueryBuilder.field("title", 60);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content",20);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
}
} else {
if (null != knowledgeParam.getSearchScope() && Integer.valueOf(1).equals(knowledgeParam.getSearchScope())) {
multiMatchQueryBuilder.field("title");
} else if (null != knowledgeParam.getSearchScope() && Integer.valueOf(2).equals(knowledgeParam.getSearchScope())) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content");
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
} else {
multiMatchQueryBuilder.field("title", 3);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content",1);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
}
}
boolQuery.must(multiMatchQueryBuilder);
}
if (StringUtils.isNotEmpty(knowledgeParam.getOrigin())) {
boolQuery.must(QueryBuilders.matchPhraseQuery("origin", knowledgeParam.getOrigin()));
......@@ -185,12 +233,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
boolQuery.filter(QueryBuilders.rangeQuery("publishDate").lte(EsDateUtil.esFieldDateFormat(DateUtil.dateToString(new Date()))));
}
if (StringUtils.isNotBlank(knowledgeParam.getContent())) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
nestedBoolQueryBuilder.must(QueryBuilders.termQuery("contents.content", knowledgeParam.getContent()));
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
}
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
......
......@@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
@Data
public class KnowledgeParam {
private String id;
private String title;
/**
* 来源
*/
......@@ -53,6 +52,8 @@ public class KnowledgeParam {
private String startTime;
private String endTime;
private String content;
private String searchInfo;
private Integer searchScope;
private String searchAccuracy;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论