博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(通用版)salesforce中soql及sosl的伪‘Like’模糊检索
阅读量:5095 次
发布时间:2019-06-13

本文共 2277 字,大约阅读时间需要 7 分钟。

  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
> results = search.query(findQuery); Set
ids = new Set
(); for(List
result: results){ for(sobject obj : result){ ids.add(obj.Id); } } string strIds = ''; Integer i = 0; for (String str : ids) { if(i != ids.size()-1) { 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
temp = database.query(soql); List
resultList = new List
(); 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来确实费劲不少,但就实际的页面效果来看并没有多大时间损耗,数据量万条以内可行性还是挺高的。

 

转载于:https://www.cnblogs.com/codingHeart/p/6645607.html

你可能感兴趣的文章
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
生活大爆炸之何为光速
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>