mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user