@Override
public Response selectStructuredDataList(StructuredDataDTO structuredDataDTO) {
StructuredDataTypeEnum structuredDataTypeEnum = StructuredDataTypeEnum.getByStructuredType(structuredDataDTO.getStructuredType());
// 是否需要中轉到ai庫中
if(structuredDataTypeEnum !=null && structuredDataTypeEnum.isAi()){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(StringUtils.isNotBlank(structuredDataDTO.getStructuredName())) {
// 獲得分詞或者全詞模糊匹配的boolQuery
boolQueryBuilder.must(getOrBoolQuery("minSymptom", structuredDataDTO.getStructuredName()));
}
if (structuredDataTypeEnum.getBiOneClassify() != null) {
boolQueryBuilder.must(QueryBuilders.termQuery("oneClassify", structuredDataTypeEnum.getBiOneClassify()));
}
if (structuredDataTypeEnum.getBiTwoClassify() != null) {
boolQueryBuilder.must(QueryBuilders.termQuery("twoClassify", structuredDataTypeEnum.getBiTwoClassify()));
}
// 現在只取最大500條(20200415 迪迪確認)
return Response.ok(getBiStructuredDataList(boolQueryBuilder, 0, 500));
}
// 中醫證型
if(StructuredDataTypeEnum.SYNDROME_TCM.getStructuredType().equals(structuredDataDTO.getStructuredType())){
return Response.ok(getBiTypeSyndromeWordList(getOrBoolQuery("zx", structuredDataDTO.getStructuredName()), 0, 500));
}
// 中醫病名
if(StructuredDataTypeEnum.CHINESE_DISEASE_NAME.getStructuredType().equals(structuredDataDTO.getStructuredType())){
return Response.ok(getBiStandardNameLibraryNewList(getOrBoolQuery("bm", structuredDataDTO.getStructuredName()), 0, 500));
}
QueryWrapper<StructuredData> queryWrapper = new QueryWrapper<>();
if (!ObjectUtil.objectIsNull(structuredDataDTO.getStructuredName())) {
queryWrapper.like("structured_name", structuredDataDTO.getStructuredName());
}
queryWrapper.eq("structured_type", structuredDataDTO.getStructuredType());
queryWrapper.eq("is_deleted", 1);
List<StructuredData> tongues = structuredDataMapper.selectList(queryWrapper);
logger.info("舌像數據返回參數:tongues {}", JSON.toJSONString(tongues));
return Response.ok(tongues);
}
/**
* 獲得分詞或者全詞模糊匹配的boolQuery
* @param fieldName
* @param value
* @return
*/
private BoolQueryBuilder getOrBoolQuery(String fieldName, String value){
BoolQueryBuilder boolQueryBuilderTwo = QueryBuilders.boolQuery();
// 分詞
boolQueryBuilderTwo.should(new MatchQueryBuilder(fieldName, value));
// 全詞模糊匹配
boolQueryBuilderTwo.should(new WildcardQueryBuilder(fieldName, "*" + value + "*"));
return boolQueryBuilderTwo;
}