salesforce里有soql、sosl两种查询语法,soql针对模糊搜索也有‘like’关键字,然而只能针对其自带字段如:Name、Id;对于自定义添加的字段如:Message__c、Note__c采用‘like’模糊检索则会报错。

然而,一般情况业务需求上更多的会对自定义字段有模糊检索的需求,因此对此作了一些调查,然而国内salesforce并不流行,论坛博客相关讨论也很少,参考了部分JP博客、官方的相关文档,总结出两种思路来应对自定义字段模糊检索问题。

一、通过sosl(salesforce object search language)的find关键字实现

  FIND ‘sear*’ IN ALL FIELDS RETURNING Table__c 

  思路:通过find的search语句执行得到一个模糊检索的结果集,然后将结果集中的id取出放入集合内,再在主soql文中加入‘id in (模糊搜索记录的id集合)’的where条件从而达到模糊查询的目的。

if (note != null && note != '') {
String findQuery = 'FIND \'' + note + '*\' IN ALL FIELDS RETURNING Test__c';
List<List<sobject>> results = search.query(findQuery);
Set<Id> ids = new Set<Id>();
for(List<sobject> result: results){
for(sobject obj : result){
ids.add(obj.Id);
}
}
string strIds = '';
Integer i = ;
for (String str : ids) {
if(i != ids.size()-)
{
strIds += '\''+str+'\'';
strIds += ',';
}else{
strIds += '\''+str+'\'';
}
i++;
}
if(strIds != null && strIds != '')
{
soql += ' And id IN ('+strIds+')';
}else{
soql += ' And id = '+'\'\'';
}
}

  通过文档说明和测试发现:

  1. Sosl的模糊检索‘find’只能完成单词、词组以及‘hap%’这种检索,对‘%hap%’这种无能为力;
  2. 示例代码是全字段检索(IN ALL FIELDS),按API的用法换成特定列字段检索(IN Note__c FIELDS)会报错,弄得人有点烦躁;

  因此,综合考虑,还是第二种方案更为可靠。

二、通过对检索所得结果集的特定字段通过函数进行过滤实现

  obj.col.contain(keyword)

 思路:将soql执行得到的List集合遍历,对各个obj的Note__c字段进行关键字模糊搜索过滤(contain()函数),满足条件的添加到结果List中,最后返回结果List。

List<Test__c> temp = database.query(soql);
List<Test__c> resultList = new List<Test__c>();
if(strMemo!=null&&strMemo!=''){
for(Test__c dr:temp){
if(dr.Note__c!=null&&dr.Note__c!=''){
if(dr.Msg__c.contains(strMemo)){
resultList.add(dr);
}
}
}
}else{
resultList = temp;
}
return resultList;

  

  最后说下自己的看法,这种两种方法初看起来都有点效率低下,毕竟比起sql文中like来确实费劲不少,但就实际的页面效果来看并没有多大时间损耗,数据量万条以内可行性还是挺高的。

最新文章

  1. 四.CSS声明
  2. bindService和startService的区别
  3. BAE 环境下配置 struts2 + spring + hibernate(SSH)(三)spring&amp;hibernate
  4. 关于取url或者微信中参数的js
  5. Labview学习之波形图表的历史数据
  6. winPcap编程之获取适配器详细信息(三)
  7. 1419: Red is good
  8. java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=test]解决办法
  9. 转载-YARN的内存和CPU配置
  10. 八、K3 WISE 开发插件《工业单据老单插件中获取登陆用户名》
  11. bing背单词交互流程 - Chongyang Bai
  12. 1 salt执行模块开发
  13. IT部门的“2/8”现状
  14. 关于static、内部类
  15. C简介与环境配置
  16. 解决Synergy的鼠标无法从服务器(server)机屏幕移动到客户机(client)屏幕的问题
  17. python-websocket-server hacking
  18. Flume初始
  19. idea的一些快捷键
  20. 0728am thinkphp介绍

热门文章

  1. bootstrap-标签页
  2. esri-leaflet入门教程(4)-加载各类图层
  3. [Netty] - Netty IN ACTION(导言)
  4. 如何在shell脚本中导出数组供子进程使用
  5. 前端学PHP之日期与时间
  6. Gulp入门与解惑
  7. html5 离线存储 地理信息与本地存储
  8. linux系统端口查看和占用的解决方案
  9. angular ui-router 正则
  10. 解决新建maven项目速度慢的问题