feat: There is no way the, 优化ES 权重 全文搜索
This commit is contained in:
+36
-17
@@ -4,6 +4,8 @@ import com.adc.da.search.entity.*;
|
|||||||
import com.adc.da.search.service.SearchCenterService;
|
import com.adc.da.search.service.SearchCenterService;
|
||||||
import com.adc.da.search.util.DateUtil;
|
import com.adc.da.search.util.DateUtil;
|
||||||
import com.adc.da.search.util.InitStandAttrSearchUtil;
|
import com.adc.da.search.util.InitStandAttrSearchUtil;
|
||||||
|
import com.adc.da.sys.dao.DicTypeEODao;
|
||||||
|
import com.adc.da.sys.entity.DicTypeEO;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@@ -30,7 +32,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
|
|||||||
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
|
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
|
||||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
||||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
||||||
import org.elasticsearch.search.sort.SortBuilders;
|
|
||||||
import org.elasticsearch.search.sort.SortOrder;
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
import org.json.JSONTokener;
|
import org.json.JSONTokener;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -57,6 +58,9 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
|
|
||||||
private TransportClient client;
|
private TransportClient client;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DicTypeEODao dicTypeEODao;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
client = this.transportClient;
|
client = this.transportClient;
|
||||||
@@ -1293,12 +1297,22 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
String real = searchInfoEO.getSelectValue();
|
String real = searchInfoEO.getSelectValue();
|
||||||
boolean isReal = false;
|
boolean isReal = false;
|
||||||
int num = searchInfoEO.getSelectValue().indexOf(" ");
|
int num = searchInfoEO.getSelectValue().indexOf(" ");
|
||||||
|
//查询字典表,形成Hash映射提升速度
|
||||||
|
List<DicTypeEO> dicInfo = dicTypeEODao.getDicInfo("dic_id","dic_type_code", "dic_type_name");
|
||||||
|
Map<String, String> dicMap = dicInfo.stream()
|
||||||
|
.filter(item-> ("JKSADFH564S".equals(item.getDicId()) || "NGETEMDJDI".equals(item.getDicId()) || "sg9gb7liywkrnv3pa5uh".equals(item.getDicId())) && !item.getDicTypeCode().isEmpty())
|
||||||
|
.collect(Collectors.toMap(DicTypeEO::getDicTypeCode,DicTypeEO::getDicTypeName,(value1, value2 )->value2));
|
||||||
String value = "";
|
String value = "";
|
||||||
String select = "";
|
String select = "";
|
||||||
if (-1 != num) {
|
if (-1 != num) {
|
||||||
value = searchInfoEO.getSelectValue().substring(0, num).trim().toUpperCase();
|
value = searchInfoEO.getSelectValue().substring(0, num).trim().toUpperCase();
|
||||||
select = searchInfoEO.getSelectValue().substring(num + 1).trim();
|
if (dicMap.containsKey(value) && dicMap.get(value) != null && !"".equals(dicMap.get(value))){
|
||||||
real = value + " " + select;
|
select = searchInfoEO.getSelectValue().substring(num + 1).trim();
|
||||||
|
real = value + " " + select;
|
||||||
|
}else {
|
||||||
|
select = null;
|
||||||
|
value = real;
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
String reg = ".*[0-9].*";
|
String reg = ".*[0-9].*";
|
||||||
if("-".contains(real)){
|
if("-".contains(real)){
|
||||||
@@ -1322,7 +1336,12 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
value = value.toUpperCase();
|
value = value.toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
real = value + " " + select;
|
if (dicMap.containsKey(value) && dicMap.get(value) != null && !"".equals(dicMap.get(value))){
|
||||||
|
real = value + " " + select;
|
||||||
|
}else {
|
||||||
|
select = null;
|
||||||
|
value = real;
|
||||||
|
}
|
||||||
}else if(real.matches(reg)){
|
}else if(real.matches(reg)){
|
||||||
value = real.replaceAll("[^(A-Za-z\\/)]", "");
|
value = real.replaceAll("[^(A-Za-z\\/)]", "");
|
||||||
String[] valArr = value.split("\\/");
|
String[] valArr = value.split("\\/");
|
||||||
@@ -1345,7 +1364,13 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
value = value.toUpperCase();
|
value = value.toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
real = value + " " + select;
|
System.out.println(dicMap.get(value));
|
||||||
|
if (dicMap.containsKey(value) && dicMap.get(value) != null && !"".equals(dicMap.get(value))){
|
||||||
|
real = value + " " + select;
|
||||||
|
}else {
|
||||||
|
select = null;
|
||||||
|
value = real;
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
value = real;
|
value = real;
|
||||||
select = "";
|
select = "";
|
||||||
@@ -1399,16 +1424,10 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
|
|
||||||
if(null != value || null != selects){
|
if(null != value || null != selects){
|
||||||
if (null != value && selects == null) {
|
if (null != value && selects == null) {
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
boolSelectValue
|
||||||
"title"
|
.should(QueryBuilders.wildcardQuery("title.keyword", "*" + value + "*").boost(1000f))
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
.should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + value + "*").boost(0.0000000000000000000000000000000001f))
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
.should(QueryBuilders.wildcardQuery("issue_time", "*" + value + "*"));
|
||||||
"textContent"
|
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
|
||||||
"textItems"
|
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
|
||||||
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
|
|
||||||
// multiQueryBuilder = QueryBuilders.multiMatchQuery("*"+value+"*",
|
// multiQueryBuilder = QueryBuilders.multiMatchQuery("*"+value+"*",
|
||||||
// "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f);
|
// "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f);
|
||||||
//// boolQueryMust.must(multiQueryBuilder);
|
//// boolQueryMust.must(multiQueryBuilder);
|
||||||
@@ -1468,14 +1487,13 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
|
|
||||||
updateIndex("fulltextserch",99999999,2);
|
updateIndex("fulltextserch",99999999,2);
|
||||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||||
.addSort(SortBuilders.fieldSort("issue_time").unmappedType("String").order(SortOrder.DESC))
|
|
||||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||||
.highlighter(hiBuilder)
|
.highlighter(hiBuilder)
|
||||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||||
.setSize(searchInfoEO.getPageSize());
|
.setSize(searchInfoEO.getPageSize());
|
||||||
|
|
||||||
searchRequestBuilder.setQuery(boolQueryShould).setTrackTotalHits(true);
|
searchRequestBuilder.setQuery(boolQueryShould).setTrackTotalHits(true);
|
||||||
searchRequestBuilder.addSort(SortBuilders.fieldSort("issue_time").unmappedType("String").order(SortOrder.DESC));
|
|
||||||
// 获取查询到的结果
|
// 获取查询到的结果
|
||||||
SearchResponse response = searchRequestBuilder.get();
|
SearchResponse response = searchRequestBuilder.get();
|
||||||
for (SearchHit searchHit : response.getHits().getHits()) {
|
for (SearchHit searchHit : response.getHits().getHits()) {
|
||||||
@@ -1508,6 +1526,7 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
result.add(sourceAsMap);
|
result.add(sourceAsMap);
|
||||||
}
|
}
|
||||||
searchInfoEO.getPager().setRowCount((int) response.getHits().getTotalHits().value);
|
searchInfoEO.getPager().setRowCount((int) response.getHits().getTotalHits().value);
|
||||||
|
//给aqi升序排,null放到最后
|
||||||
// result.sort((o1, o2) -> {
|
// result.sort((o1, o2) -> {
|
||||||
// if (o1.get("issue_time") != null && o2.get("issue_time") != null) {
|
// if (o1.get("issue_time") != null && o2.get("issue_time") != null) {
|
||||||
// return o2.get("issue_time").toString().compareTo(o1.get("issue_time").toString());
|
// return o2.get("issue_time").toString().compareTo(o1.get("issue_time").toString());
|
||||||
|
|||||||
@@ -609,6 +609,7 @@
|
|||||||
<foreach collection="filed" index="index" item="item" separator=" and " >
|
<foreach collection="filed" index="index" item="item" separator=" and " >
|
||||||
${item} is not NULL
|
${item} is not NULL
|
||||||
</foreach>
|
</foreach>
|
||||||
|
and TS_DICTYPE.VALID_FLAG= '0'
|
||||||
</where>
|
</where>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
Reference in New Issue
Block a user