(improvement)(Headless) Filter out terms whose detect word length is 1 (#1041)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2024-05-28 21:37:19 +08:00
committed by GitHub
parent c42f3477a4
commit bd9cc8f88a
3 changed files with 21 additions and 2 deletions

View File

@@ -46,6 +46,7 @@ public abstract class BaseMapper implements SchemaMapper {
private void filter(QueryContext queryContext) {
filterByDataSetId(queryContext);
filterTermByDetectWordLen(queryContext);
switch (queryContext.getQueryDataType()) {
case TAG:
filterByQueryDataType(queryContext, element -> !(element.getIsTag() > 0));
@@ -79,6 +80,22 @@ public abstract class BaseMapper implements SchemaMapper {
}
}
private static void filterTermByDetectWordLen(QueryContext queryContext) {
Map<Long, List<SchemaElementMatch>> dataSetElementMatches =
queryContext.getMapInfo().getDataSetElementMatches();
for (Map.Entry<Long, List<SchemaElementMatch>> entry : dataSetElementMatches.entrySet()) {
List<SchemaElementMatch> value = entry.getValue();
if (!CollectionUtils.isEmpty(value)) {
value.removeIf(schemaElementMatch -> {
if (!SchemaElementType.TERM.equals(schemaElementMatch.getElement().getType())) {
return false;
}
return StringUtils.length(schemaElementMatch.getDetectWord()) <= 1;
});
}
}
}
private static void filterByQueryDataType(QueryContext queryContext, Predicate<SchemaElement> needRemovePredicate) {
queryContext.getMapInfo().getDataSetElementMatches().values().stream().forEach(
schemaElementMatches -> schemaElementMatches.removeIf(