Merge remote-tracking branch 'origin/master'
Some checks failed
supersonic CentOS CI / build (21) (push) Failing after 1m45s
supersonic ubuntu CI / build (21) (push) Failing after 37s
supersonic mac CI / build (21) (push) Has been cancelled
supersonic windows CI / build (21) (push) Has been cancelled

This commit is contained in:
jerryjzhang
2025-10-12 21:56:03 +08:00
3 changed files with 23 additions and 28 deletions

View File

@@ -33,6 +33,7 @@ import java.util.Objects;
import java.util.PriorityQueue; import java.util.PriorityQueue;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import static com.hankcs.hanlp.utility.Predefine.logger; import static com.hankcs.hanlp.utility.Predefine.logger;
@@ -40,7 +41,7 @@ public class MultiCustomDictionary extends DynamicCustomDictionary {
public static int MAX_SIZE = 10; public static int MAX_SIZE = 10;
public static Boolean removeDuplicates = true; public static Boolean removeDuplicates = true;
public static ConcurrentHashMap<String, PriorityQueue<Term>> NATURE_TO_VALUES = public static ConcurrentHashMap<String, PriorityBlockingQueue<Term>> NATURE_TO_VALUES =
new ConcurrentHashMap<>(); new ConcurrentHashMap<>();
private static boolean addToSuggesterTrie = true; private static boolean addToSuggesterTrie = true;
@@ -146,9 +147,10 @@ public class MultiCustomDictionary extends DynamicCustomDictionary {
} }
for (int i = 0; i < attribute.nature.length; i++) { for (int i = 0; i < attribute.nature.length; i++) {
Nature nature = attribute.nature[i]; Nature nature = attribute.nature[i];
PriorityQueue<Term> priorityQueue = NATURE_TO_VALUES.get(nature.toString()); PriorityBlockingQueue<Term> priorityQueue =
NATURE_TO_VALUES.get(nature.toString());
if (Objects.isNull(priorityQueue)) { if (Objects.isNull(priorityQueue)) {
priorityQueue = new PriorityQueue<>(MAX_SIZE, priorityQueue = new PriorityBlockingQueue<>(MAX_SIZE,
Comparator.comparingInt(Term::getFrequency).reversed()); Comparator.comparingInt(Term::getFrequency).reversed());
NATURE_TO_VALUES.put(nature.toString(), priorityQueue); NATURE_TO_VALUES.put(nature.toString(), priorityQueue);
} }

View File

@@ -24,6 +24,7 @@ import java.util.PriorityQueue;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.TreeSet; import java.util.TreeSet;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@@ -200,7 +201,7 @@ public class SearchService {
public static List<String> getDimensionValue(DimensionValueReq dimensionValueReq) { public static List<String> getDimensionValue(DimensionValueReq dimensionValueReq) {
String nature = DictWordType.NATURE_SPILT + dimensionValueReq.getModelId() String nature = DictWordType.NATURE_SPILT + dimensionValueReq.getModelId()
+ DictWordType.NATURE_SPILT + dimensionValueReq.getElementID(); + DictWordType.NATURE_SPILT + dimensionValueReq.getElementID();
PriorityQueue<Term> terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature); PriorityBlockingQueue<Term> terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature);
if (CollectionUtils.isEmpty(terms)) { if (CollectionUtils.isEmpty(terms)) {
return new ArrayList<>(); return new ArrayList<>();
} }

View File

@@ -422,33 +422,25 @@ public class DictUtils {
return joiner.toString(); return joiner.toString();
} }
public String defaultDateFilter(DateConf dateConf) {
String format = itemValueDateFormat;
String start = LocalDate.now().minusDays(itemValueDateStart)
.format(DateTimeFormatter.ofPattern(format));
String end = LocalDate.now().minusDays(itemValueDateEnd)
.format(DateTimeFormatter.ofPattern(format));
if (Objects.nonNull(dateConf)) {
return String.format("( %s >= '%s' and %s <= '%s' )", dateConf.getDateField(), start,
dateConf.getDateField(), end);
} else {
return String.format("( %s >= '%s' and %s <= '%s' )", "dt", start, "dt", end);
}
}
private String generateDictDateFilter(DictItemResp dictItemResp) { private String generateDictDateFilter(DictItemResp dictItemResp) {
ItemValueConfig config = dictItemResp.getConfig(); Dimension partitionTimeDimension = getPartitionTimeDimension(dictItemResp.getModelId());
if (config == null) { // 如果没有设置数据时间维度,则无法做时间分区过滤
if (partitionTimeDimension == null) {
return ""; return "";
} }
if (!partitionedModel(dictItemResp.getModelId())) { ItemValueConfig config = dictItemResp.getConfig();
return ""; // 默认使用数据时间维度进行时间分区过滤
}
// 未进行设置
if (Objects.isNull(config) || Objects.isNull(config.getDateConf())) { if (Objects.isNull(config) || Objects.isNull(config.getDateConf())) {
return defaultDateFilter(null); String startDate = LocalDate.now().minusDays(itemValueDateStart)
.format(DateTimeFormatter.ofPattern(partitionTimeDimension.getDateFormat()));
String endDate = LocalDate.now().minusDays(itemValueDateEnd)
.format(DateTimeFormatter.ofPattern(partitionTimeDimension.getDateFormat()));
return String.format("( %s >= '%s' and %s <= '%s' )",
partitionTimeDimension.getBizName(), startDate,
partitionTimeDimension.getBizName(), endDate);
} }
// 全表扫描 // 全表扫描
if (DateConf.DateMode.ALL.equals(config.getDateConf().getDateMode())) { if (DateConf.DateMode.ALL.equals(config.getDateConf().getDateMode())) {
return ""; return "";
@@ -467,15 +459,15 @@ public class DictUtils {
return ""; return "";
} }
private boolean partitionedModel(Long modelId) { private Dimension getPartitionTimeDimension(Long modelId) {
ModelResp model = modelService.getModel(modelId); ModelResp model = modelService.getModel(modelId);
if (Objects.nonNull(model)) { if (Objects.nonNull(model)) {
List<Dimension> timeDims = model.getTimeDimension(); List<Dimension> timeDims = model.getTimeDimension();
if (!CollectionUtils.isEmpty(timeDims)) { if (!CollectionUtils.isEmpty(timeDims)) {
return true; return timeDims.get(0);
} }
} }
return false; return null;
} }
private String generateDictDateFilterRecent(DictItemResp dictItemResp) { private String generateDictDateFilterRecent(DictItemResp dictItemResp) {