mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
[improvement][chat] The similarity of MapModeEnum.STRICT is 1 (#1851)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.tencent.supersonic.common.jsqlparser;
|
package com.tencent.supersonic.common.jsqlparser;
|
||||||
|
|
||||||
|
import com.tencent.supersonic.common.util.EditDistanceUtils;
|
||||||
import com.tencent.supersonic.common.util.StringUtil;
|
import com.tencent.supersonic.common.util.StringUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -21,7 +22,7 @@ import java.util.stream.Collectors;
|
|||||||
@Data
|
@Data
|
||||||
public class ReplaceService {
|
public class ReplaceService {
|
||||||
|
|
||||||
@Value("${s2.replace.column.threshold:0.4}")
|
@Value("${s2.replace.threshold:0.4}")
|
||||||
private double replaceColumnThreshold;
|
private double replaceColumnThreshold;
|
||||||
|
|
||||||
public void replaceFunction(Function expression, Map<String, String> fieldNameMap,
|
public void replaceFunction(Function expression, Map<String, String> fieldNameMap,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.tencent.supersonic.common.jsqlparser;
|
package com.tencent.supersonic.common.util;
|
||||||
|
|
||||||
public class EditDistanceUtils {
|
public class EditDistanceUtils {
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ class SqlReplaceHelperTest {
|
|||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
ReplaceService replaceService = new ReplaceService();
|
ReplaceService replaceService = new ReplaceService();
|
||||||
replaceService.setReplaceColumnThreshold(0.0);
|
replaceService.setReplaceColumnThreshold(0.4);
|
||||||
|
|
||||||
// Mock the static method ContextUtils.getBean
|
// Mock the static method ContextUtils.getBean
|
||||||
mockedContextUtils = mockStatic(ContextUtils.class);
|
mockedContextUtils = mockStatic(ContextUtils.class);
|
||||||
@@ -82,9 +82,8 @@ class SqlReplaceHelperTest {
|
|||||||
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
||||||
|
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"SELECT 歌曲名 FROM 歌曲库 WHERE datediff('day', 发布日期, '2023-08-09') <= 1 AND 歌手名 = '周杰伦' "
|
"SELECT 歌曲名 FROM 歌曲库 WHERE datediff('day', 发布日期, '2023-08-09') <= 1 AND 歌手名 = '周杰伦' " +
|
||||||
+ "AND 歌手名 = '林俊杰' AND 歌手名 = '陈奕迅' AND 数据日期 = '2023-08-09' AND "
|
"AND 歌手名 = '林俊杰' AND 歌手名 = '陈' AND 数据日期 = '2023-08-09' AND 歌曲发布时 = '2023-08-01' ORDER BY 播放量 DESC LIMIT 11",
|
||||||
+ "歌曲发布时 = '2023-08-01' ORDER BY 播放量 DESC LIMIT 11",
|
|
||||||
replaceSql);
|
replaceSql);
|
||||||
|
|
||||||
replaceSql = "select 歌曲名 from 歌曲库 where (datediff('day', 发布日期, '2023-08-09') <= 1 "
|
replaceSql = "select 歌曲名 from 歌曲库 where (datediff('day', 发布日期, '2023-08-09') <= 1 "
|
||||||
@@ -94,9 +93,8 @@ class SqlReplaceHelperTest {
|
|||||||
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
||||||
|
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"SELECT 歌曲名 FROM 歌曲库 WHERE (datediff('day', 发布日期, '2023-08-09') <= 1 AND 歌手名 = '周杰伦' "
|
"SELECT 歌曲名 FROM 歌曲库 WHERE (datediff('day', 发布日期, '2023-08-09') <= 1 AND 歌手名 = '周杰伦' AND " +
|
||||||
+ "AND 歌手名 = '林俊杰' AND 歌手名 = '陈奕迅' AND 歌曲发布时 = '2023-08-01') "
|
"歌手名 = '林俊杰' AND 歌手名 = '陈' AND 歌曲发布时 = '2023-08-01') AND 数据日期 = '2023-08-09' ORDER BY 播放量 DESC LIMIT 11",
|
||||||
+ "AND 数据日期 = '2023-08-09' ORDER BY 播放量 DESC LIMIT 11",
|
|
||||||
replaceSql);
|
replaceSql);
|
||||||
|
|
||||||
replaceSql = "select 歌曲名 from 歌曲库 where (datediff('day', 发布日期, '2023-08-09') <= 1 "
|
replaceSql = "select 歌曲名 from 歌曲库 where (datediff('day', 发布日期, '2023-08-09') <= 1 "
|
||||||
@@ -107,10 +105,9 @@ class SqlReplaceHelperTest {
|
|||||||
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
replaceSql = SqlReplaceHelper.replaceValue(replaceSql, filedNameToValueMap2, false);
|
||||||
|
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"SELECT 歌曲名 FROM 歌曲库 WHERE (datediff('day', 发布日期, '2023-08-09') <= 1 AND "
|
"SELECT 歌曲名 FROM 歌曲库 WHERE (datediff('day', 发布日期, '2023-08-09') <= 1 AND 歌手名 = '周杰伦' AND 歌手名 = '林俊杰' AND " +
|
||||||
+ "歌手名 = '周杰伦' AND 歌手名 = '林俊杰' AND 歌手名 = '陈奕迅' AND 歌曲发布时 = '2023-08-01' "
|
"歌手名 = '陈' AND 歌曲发布时 = '2023-08-01' AND 播放量 < (SELECT min(播放量) FROM 歌曲库 WHERE 语种 = '英文')) " +
|
||||||
+ "AND 播放量 < (SELECT min(播放量) FROM 歌曲库 WHERE 语种 = '英文')) AND 数据日期 = '2023-08-09' "
|
"AND 数据日期 = '2023-08-09' ORDER BY 播放量 DESC LIMIT 11",
|
||||||
+ "ORDER BY 播放量 DESC LIMIT 11",
|
|
||||||
replaceSql);
|
replaceSql);
|
||||||
|
|
||||||
Map<String, Map<String, String>> filedNameToValueMap3 = new HashMap<>();
|
Map<String, Map<String, String>> filedNameToValueMap3 = new HashMap<>();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import java.util.Set;
|
|||||||
public abstract class BaseMatchStrategy<T extends MapResult> implements MatchStrategy<T> {
|
public abstract class BaseMatchStrategy<T extends MapResult> implements MatchStrategy<T> {
|
||||||
@Override
|
@Override
|
||||||
public Map<MatchText, List<T>> match(ChatQueryContext chatQueryContext, List<S2Term> terms,
|
public Map<MatchText, List<T>> match(ChatQueryContext chatQueryContext, List<S2Term> terms,
|
||||||
Set<Long> detectDataSetIds) {
|
Set<Long> detectDataSetIds) {
|
||||||
String text = chatQueryContext.getRequest().getQueryText();
|
String text = chatQueryContext.getRequest().getQueryText();
|
||||||
if (Objects.isNull(terms) || StringUtils.isEmpty(text)) {
|
if (Objects.isNull(terms) || StringUtils.isEmpty(text)) {
|
||||||
return null;
|
return null;
|
||||||
@@ -36,7 +36,7 @@ public abstract class BaseMatchStrategy<T extends MapResult> implements MatchStr
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<T> detect(ChatQueryContext chatQueryContext, List<S2Term> terms,
|
public List<T> detect(ChatQueryContext chatQueryContext, List<S2Term> terms,
|
||||||
Set<Long> detectDataSetIds) {
|
Set<Long> detectDataSetIds) {
|
||||||
throw new RuntimeException("Not implemented");
|
throw new RuntimeException("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +64,9 @@ public abstract class BaseMatchStrategy<T extends MapResult> implements MatchStr
|
|||||||
}
|
}
|
||||||
|
|
||||||
public double getThreshold(Double threshold, Double minThreshold, MapModeEnum mapModeEnum) {
|
public double getThreshold(Double threshold, Double minThreshold, MapModeEnum mapModeEnum) {
|
||||||
|
if (MapModeEnum.STRICT.equals(mapModeEnum)) {
|
||||||
|
return 1.0d;
|
||||||
|
}
|
||||||
double decreaseAmount = (threshold - minThreshold) / 4;
|
double decreaseAmount = (threshold - minThreshold) / 4;
|
||||||
double divideThreshold = threshold - mapModeEnum.threshold * decreaseAmount;
|
double divideThreshold = threshold - mapModeEnum.threshold * decreaseAmount;
|
||||||
return divideThreshold >= minThreshold ? divideThreshold : minThreshold;
|
return divideThreshold >= minThreshold ? divideThreshold : minThreshold;
|
||||||
|
|||||||
Reference in New Issue
Block a user