我有一个名为customer的自定义对象,其中包含Customer_Name、Address_Line_1、Post_Code等字段。
我想遍历所有记录并比较Customer_Name的相似度(基于模糊搜索或Levenshtein距离)。如果相似性高于或低于一定阈值,则会更新自定义字段(Possible_Duplicate_Customer_ID__c)以标识可能重复的记录。
我已经成功实现了这个功能,但我遇到了两个问题:
1). 超出了Salesforce管理限制(太多的脚本语句:200001),可能是由于Levenshtein距离算法所需的循环过程太繁琐。 2). 同样,我提交的列表(newList)中包含了重复的ID。
我想遍历所有记录并比较Customer_Name的相似度(基于模糊搜索或Levenshtein距离)。如果相似性高于或低于一定阈值,则会更新自定义字段(Possible_Duplicate_Customer_ID__c)以标识可能重复的记录。
我已经成功实现了这个功能,但我遇到了两个问题:
1). 超出了Salesforce管理限制(太多的脚本语句:200001),可能是由于Levenshtein距离算法所需的循环过程太繁琐。 2). 同样,我提交的列表(newList)中包含了重复的ID。
private static List<Customer__c> newList = new List<Customer__c>();
webService static Integer findDupes() {
Integer returnCount = 0;
Double cost = 0;
Integer COST_THRESHOLD = 5;
Map<id,Customer__c> cMap = new Map<id,Customer__c>([
select ID, Name, Customer_Name__c, Possible_Duplicate_Customer_ID__c
from Customer__c
]);
List<Customer__c> custList1 = cMap.values();
List<Customer__c> custList2 = custList1.clone();
for (Customer__c cust1 :custList1) {
for (Customer__c cust2 :custList2) {
cost = LevenshteinDistance.computeLevenshteinDistance(
cust1.Customer_Name__c, cust2.Customer_Name__c);
if(cost<COST_THRESHOLD && cost != 0) {
Customer__c c = new Customer__c(
id = cust2.Id,
Possible_Duplicate_Customer_ID__c = cust1.Name
);
newList.add(c);
}
System.debug(cost+' edits to transform '
+cust1.Customer_Name__c+' to '+cust2.Customer_Name__c);
}
}
returnCount = newList.size();
update newList;
return returnCount;
}