|
@@ -7,10 +7,13 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.bowintek.practice.mapper.cquery.EsQueryKeywordCQuery;
|
|
|
import com.bowintek.practice.model.EsQueryKeyword;
|
|
|
import com.bowintek.practice.services.service.AnalyzeService;
|
|
|
+import com.bowintek.practice.services.service.EsIndexService;
|
|
|
import com.bowintek.practice.util.StringUtils;
|
|
|
import com.bowintek.practice.vo.Analyze.AnalyzeComparisonResult;
|
|
|
import com.bowintek.practice.vo.Analyze.AnalyzeModel;
|
|
|
import com.bowintek.practice.vo.Analyze.ComparisonResult;
|
|
|
+import com.bowintek.practice.vo.EsIndexVo;
|
|
|
+import com.bowintek.practice.vo.EsIndexfieldVo;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
@@ -32,6 +35,8 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
private ElasticsearchClient esClient;
|
|
|
@Autowired
|
|
|
private EsQueryKeywordCQuery esQueryKeywordCQuery;
|
|
|
+ @Autowired
|
|
|
+ private EsIndexService esIndexService;
|
|
|
|
|
|
private static Date refTime = null;
|
|
|
private static boolean isInitStaticWords = false;
|
|
@@ -46,8 +51,8 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
//对象分词
|
|
|
private static HashMap<String, AnalyzeModel> mapObjects = new HashMap<>();
|
|
|
|
|
|
- private void initStaticWords(){
|
|
|
- if(isInitStaticWords) return;
|
|
|
+ private void initStaticWords() {
|
|
|
+ if (isInitStaticWords) return;
|
|
|
isInitStaticWords = true;
|
|
|
|
|
|
//对比符号
|
|
@@ -67,73 +72,83 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
//无用分词
|
|
|
addToMainDict(mapUseless, "的", "无用", "");
|
|
|
}
|
|
|
- private void initKeyWords(){
|
|
|
+
|
|
|
+ private void initKeyWords() {
|
|
|
initStaticWords();
|
|
|
|
|
|
//查找是否有记录需要更新
|
|
|
String timeString = null;
|
|
|
- if(refTime!=null) {
|
|
|
- timeString = (refTime.getTime()/1000)+"";
|
|
|
- System.out.println("timeString:"+timeString);
|
|
|
+ if (refTime != null) {
|
|
|
+ timeString = (refTime.getTime() / 1000) + "";
|
|
|
+ System.out.println("timeString:" + timeString);
|
|
|
}
|
|
|
List<EsQueryKeyword> dbList = esQueryKeywordCQuery.getList(null, timeString);
|
|
|
- if(dbList.size()==0) return;
|
|
|
+ if (dbList.size() == 0) return;
|
|
|
|
|
|
- for(int i=0;i<dbList.size();i++){
|
|
|
+ for (int i = 0; i < dbList.size(); i++) {
|
|
|
EsQueryKeyword keyword = dbList.get(i);
|
|
|
//同义词
|
|
|
List<String> synonymList = new ArrayList<>();
|
|
|
- if(!StringUtils.IsNullEmpty(keyword.getSynonymText())) {
|
|
|
+ if (!StringUtils.IsNullEmpty(keyword.getSynonymText())) {
|
|
|
synonymList.addAll(List.of(keyword.getSynonymText().split(",")));
|
|
|
}
|
|
|
|
|
|
- if(keyword.getKeywordType().equals("无用")){
|
|
|
+ if (keyword.getKeywordType().equals("无用")) {
|
|
|
addToMainDict(mapUseless, keyword.getKeywordName(), keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
addToMainDict(mapUseless, synonymList, keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
- }
|
|
|
- else if(keyword.getKeywordType().equals("对象")){
|
|
|
+ } else if (keyword.getKeywordType().equals("对象")) {
|
|
|
addToMainDict(mapObjects, keyword.getKeywordName(), keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
addToMainDict(mapObjects, synonymList, keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
- }
|
|
|
- else if(keyword.getKeywordType().equals("单位")){
|
|
|
+ } else if (keyword.getKeywordType().equals("单位")) {
|
|
|
addToMainDict(mapUnits, keyword.getKeywordName(), keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
addToMainDict(mapUnits, synonymList, keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
- }
|
|
|
- else if(keyword.getKeywordType().equals("对比符号")){
|
|
|
+ } else if (keyword.getKeywordType().equals("对比符号")) {
|
|
|
addToMainDict(mapSymbols, keyword.getKeywordName(), keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
addToMainDict(mapSymbols, synonymList, keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else {
|
|
|
addToMainDict(mapAnalyze, keyword.getKeywordName(), keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
addToMainDict(mapAnalyze, synonymList, keyword.getKeywordType(), keyword.getEsIndexField());
|
|
|
}
|
|
|
|
|
|
//最大更新时间
|
|
|
- if(refTime==null || refTime.getTime() < keyword.getCreateTime().getTime())
|
|
|
+ if (refTime == null || refTime.getTime() < keyword.getCreateTime().getTime())
|
|
|
refTime = keyword.getCreateTime();
|
|
|
}
|
|
|
+ EsIndexVo indexModel = esIndexService.getAllList().get(0);
|
|
|
+
|
|
|
+ sysMainDict(indexModel.getFieldList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sysMainDict(List<EsIndexfieldVo> fields) {
|
|
|
+ fields.forEach(it -> {
|
|
|
+ addToMainDict(mapAnalyze, it.getFieldName(), "维度", it.getFieldCode());
|
|
|
+ if (it.getChildFields() != null && it.getChildFields().size() > 0) {
|
|
|
+ sysMainDict(it.getChildFields());
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- private void addToMainDict(HashMap<String, AnalyzeModel> map,String keyword, String keywordType, String esIndexField){
|
|
|
+ private void addToMainDict(HashMap<String, AnalyzeModel> map, String keyword, String keywordType, String esIndexField) {
|
|
|
List<String> extStringList = new ArrayList<>(Arrays.stream(new String[]{keyword}).toList());
|
|
|
addToMainDict(map, extStringList, keywordType, esIndexField);
|
|
|
}
|
|
|
- private void addToMainDict(HashMap<String, AnalyzeModel> map,List<String> extStringList, String keywordType, String esIndexField){
|
|
|
- extStringList.forEach(keyword->{
|
|
|
+
|
|
|
+ private void addToMainDict(HashMap<String, AnalyzeModel> map, List<String> extStringList, String keywordType, String esIndexField) {
|
|
|
+ extStringList.forEach(keyword -> {
|
|
|
map.put(keyword, AnalyzeModel.GenModel(keywordType, esIndexField));
|
|
|
});
|
|
|
|
|
|
//动态添加分词配置
|
|
|
Collection<String> colls = new Stack<>();
|
|
|
org.wltea.analyzer.dic.Dictionary dictionary = org.wltea.analyzer.dic.Dictionary.getSingleton();
|
|
|
- for(int i=0;i<extStringList.size();i++){
|
|
|
+ for (int i = 0; i < extStringList.size(); i++) {
|
|
|
Hit hit = dictionary.matchInMainDict(extStringList.get(i).trim().toLowerCase().toCharArray());
|
|
|
- if(!hit.isMatch()){
|
|
|
- System.out.println("initKeyWords:添加["+extStringList.get(i)+"]到MainDict");
|
|
|
+ if (!hit.isMatch()) {
|
|
|
+ System.out.println("initKeyWords:添加[" + extStringList.get(i) + "]到MainDict");
|
|
|
colls.add(extStringList.get(i));
|
|
|
}
|
|
|
}
|
|
|
- if(colls.size()>0) dictionary.addWords(colls);
|
|
|
+ if (colls.size() > 0) dictionary.addWords(colls);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -145,8 +160,7 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
AnalyzeResponse response = esClient.indices().analyze(builder.build());
|
|
|
System.out.println(response.toString());
|
|
|
return response;
|
|
|
- }
|
|
|
- catch (Exception ex){
|
|
|
+ } catch (Exception ex) {
|
|
|
ex.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
@@ -156,16 +170,16 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
public List<AnalyzeResponse> analyzes(String text) {
|
|
|
String[] arys = text.split(" ");
|
|
|
List<AnalyzeResponse> responses = new ArrayList<>();
|
|
|
- for (int i=0;i<arys.length;i++){
|
|
|
+ for (int i = 0; i < arys.length; i++) {
|
|
|
AnalyzeResponse response = analyze(arys[i]);
|
|
|
- if(response!=null) responses.add(response);
|
|
|
+ if (response != null) responses.add(response);
|
|
|
}
|
|
|
return responses;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ComparisonResult analyzeJava(String text) {
|
|
|
- try{
|
|
|
+ try {
|
|
|
StringReader reader = new StringReader(text);
|
|
|
IKSegmenter segmenter = new IKSegmenter(reader, true);
|
|
|
|
|
@@ -187,7 +201,7 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
//分析表达式
|
|
|
AnalyzeComparisonResult analyze = findAnalyzeMap(modelList, mapAnalyze);
|
|
|
AnalyzeComparisonResult symbols = findAnalyzeMap(modelList, mapSymbols);
|
|
|
- if(analyze.getIndex()==-1 || symbols.getIndex()==-1){
|
|
|
+ if (analyze.getIndex() == -1 || symbols.getIndex() == -1) {
|
|
|
//不存在对比操作,返回整串字符串进行全文搜索
|
|
|
return ComparisonResult.GenModel("query", text);
|
|
|
}
|
|
@@ -197,17 +211,17 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
result.setOpreation(symbols.getModel().getLexemeText());
|
|
|
//度量、维度关联的字段
|
|
|
result.setFieldName(analyze.getModel().getLexemeText());
|
|
|
- if(!StringUtils.IsNullEmpty(analyze.getModel().getEsIndexField()))
|
|
|
+ if (!StringUtils.IsNullEmpty(analyze.getModel().getEsIndexField()))
|
|
|
result.setFields(analyze.getModel().getEsIndexField());
|
|
|
|
|
|
//有 TYPE_CQUAN 说明读取到了 数值+单位
|
|
|
AnalyzeComparisonResult cquan = findByLexemeType(modelList, "TYPE_CQUAN");
|
|
|
- if(cquan.getIndex()>=0){
|
|
|
+ if (cquan.getIndex() >= 0) {
|
|
|
String[] splits = splitUnit(cquan.getModel().getLexemeText(), mapUnits);
|
|
|
|
|
|
//对比的值或单位
|
|
|
result.setValue(splits[0]);
|
|
|
- if(splits.length>1) result.setUint(splits[1]);
|
|
|
+ if (splits.length > 1) result.setUint(splits[1]);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -215,19 +229,19 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
AnalyzeComparisonResult useless = findAnalyzeMap(modelList, mapUseless);
|
|
|
AnalyzeComparisonResult object = findAnalyzeMap(modelList, mapObjects);
|
|
|
int end = text.length(), start = symbols.getModel().getEnd();
|
|
|
- if(useless.getIndex()>0 && end > useless.getModel().getBegin())
|
|
|
+ if (useless.getIndex() > 0 && end > useless.getModel().getBegin())
|
|
|
end = useless.getModel().getBegin();
|
|
|
- if(object.getIndex()>0 && end > object.getModel().getBegin())
|
|
|
+ if (object.getIndex() > 0 && end > object.getModel().getBegin())
|
|
|
end = object.getModel().getBegin();
|
|
|
//System.out.println("start:"+start+" end:"+end);
|
|
|
|
|
|
- if(start<end){
|
|
|
+ if (start < end) {
|
|
|
String valString = text.substring(start, end);
|
|
|
String[] splits = splitUnit(valString, mapUnits);
|
|
|
|
|
|
//对比的值或单位
|
|
|
result.setValue(splits[0]);
|
|
|
- if(splits.length>1) result.setUint(splits[1]);
|
|
|
+ if (splits.length > 1) result.setUint(splits[1]);
|
|
|
}
|
|
|
|
|
|
return result;
|
|
@@ -246,12 +260,13 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
}
|
|
|
return new String[]{lexmeText};
|
|
|
}
|
|
|
- private AnalyzeComparisonResult findByLexemeType(List<AnalyzeModel> modelList, String lexmeType){
|
|
|
+
|
|
|
+ private AnalyzeComparisonResult findByLexemeType(List<AnalyzeModel> modelList, String lexmeType) {
|
|
|
AnalyzeComparisonResult result = new AnalyzeComparisonResult();
|
|
|
result.setIndex(-1);
|
|
|
|
|
|
- for(int i=0;i<modelList.size();i++){
|
|
|
- if(modelList.get(i).getLexemeType().equals(lexmeType)){
|
|
|
+ for (int i = 0; i < modelList.size(); i++) {
|
|
|
+ if (modelList.get(i).getLexemeType().equals(lexmeType)) {
|
|
|
result.setIndex(i);
|
|
|
result.setModel(modelList.get(i));
|
|
|
break;
|
|
@@ -260,12 +275,12 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private AnalyzeComparisonResult findAnalyzeMap(List<AnalyzeModel> modelList, HashMap<String, AnalyzeModel> map){
|
|
|
+ private AnalyzeComparisonResult findAnalyzeMap(List<AnalyzeModel> modelList, HashMap<String, AnalyzeModel> map) {
|
|
|
AnalyzeComparisonResult result = new AnalyzeComparisonResult();
|
|
|
result.setIndex(-1);
|
|
|
|
|
|
- for(int i=0;i<modelList.size();i++){
|
|
|
- if(map.containsKey(modelList.get(i).getLexemeText())){
|
|
|
+ for (int i = 0; i < modelList.size(); i++) {
|
|
|
+ if (map.containsKey(modelList.get(i).getLexemeText())) {
|
|
|
AnalyzeModel model = map.get(modelList.get(i).getLexemeText());
|
|
|
model = JSON.parseObject(JSON.toJSONString(model), AnalyzeModel.class);
|
|
|
model.setLexemeType(modelList.get(i).getLexemeType());
|
|
@@ -288,9 +303,9 @@ public class AnalyzeServiceImpl implements AnalyzeService {
|
|
|
|
|
|
List<ComparisonResult> results = new ArrayList<>();
|
|
|
String[] arys = text.split(" ");
|
|
|
- for (int i=0;i<arys.length;i++){
|
|
|
+ for (int i = 0; i < arys.length; i++) {
|
|
|
ComparisonResult result = analyzeJava(arys[i]);
|
|
|
- if(result!=null) {
|
|
|
+ if (result != null) {
|
|
|
results.add(result);
|
|
|
System.out.println(JSON.toJSON(result));
|
|
|
}
|