搜索查询,不区分特殊字符,SOQL
Search query, no distinguish special characters, SOQL
我有这段搜索广告系列名称的代码:
function test_search() {
$mySforceConnection = new SforceEnterpriseClient();
$mySoapClient = $mySforceConnection->createConnection( 'soapclient/wsdl_dev.jsp.xml' );
$mylogin = $mySforceConnection->login( USERNAME_TEST, PASSWORD_TEST . SECURITY_TOKEN_TEST );
$campaign_name = 'A \& B Campaign';
$search = 'FIND {' . $campaign_name . '} IN NAME FIELDS RETURNING CAMPAIGN(ID)';
$searchResult = $mySforceConnection->search( $search );
$campaign_id = $searchResult->searchRecords[0]->Id;
echo '<pre dir="ltr">';
var_dump( $searchResult );
var_dump( $campaign_id );
echo '</pre>';
error_log( '$searchResult: ' . print_r( $searchResult, true ) );
}
test_search();
我得到的输出是一个活动 ID,当我转到显示活动一切正常的页面时,它显示了我正在寻找的内容。
现在,如果我改变这个:
$campaign_name = 'A \& B Campaign';
进入这个:
$campaign_name = 'A \- B Campaign';
和 运行 函数 test_search()
,我仍然得到相同的广告系列 ID,我希望搜索查询能够区分!
知道为什么会发生这种情况以及如何解决吗?
谢谢,
奥德
SOSL 是一个全文搜索引擎(我在某处读到它在幕后使用 Apache Solr)。它会从您的短语中搜索单词,但您没有指定完全匹配(这会将术语用引号引起来,FIND {"A \- B Campaign"}
)。它试图变得聪明,跳过太短的单词,解释英语语法中的不同后缀等...它是一个模糊匹配引擎。
或者您可能需要的是普通的 SELECT 声明? SELECT Id FROM Campaign WHERE Name LIKE '%A & B Campaign%'
?如果您只需要 1 个对象并且只有 Name 字段...(根据我的记忆,它将是 query() 方法而不是 search())
如果您有权访问您的 SF 组织,那么只需直接在其开发者控制台中进行实验 -> 例如查询编辑器
我有这段搜索广告系列名称的代码:
function test_search() {
$mySforceConnection = new SforceEnterpriseClient();
$mySoapClient = $mySforceConnection->createConnection( 'soapclient/wsdl_dev.jsp.xml' );
$mylogin = $mySforceConnection->login( USERNAME_TEST, PASSWORD_TEST . SECURITY_TOKEN_TEST );
$campaign_name = 'A \& B Campaign';
$search = 'FIND {' . $campaign_name . '} IN NAME FIELDS RETURNING CAMPAIGN(ID)';
$searchResult = $mySforceConnection->search( $search );
$campaign_id = $searchResult->searchRecords[0]->Id;
echo '<pre dir="ltr">';
var_dump( $searchResult );
var_dump( $campaign_id );
echo '</pre>';
error_log( '$searchResult: ' . print_r( $searchResult, true ) );
}
test_search();
我得到的输出是一个活动 ID,当我转到显示活动一切正常的页面时,它显示了我正在寻找的内容。
现在,如果我改变这个:
$campaign_name = 'A \& B Campaign';
进入这个:
$campaign_name = 'A \- B Campaign';
和 运行 函数 test_search()
,我仍然得到相同的广告系列 ID,我希望搜索查询能够区分!
知道为什么会发生这种情况以及如何解决吗?
谢谢, 奥德
SOSL 是一个全文搜索引擎(我在某处读到它在幕后使用 Apache Solr)。它会从您的短语中搜索单词,但您没有指定完全匹配(这会将术语用引号引起来,FIND {"A \- B Campaign"}
)。它试图变得聪明,跳过太短的单词,解释英语语法中的不同后缀等...它是一个模糊匹配引擎。
或者您可能需要的是普通的 SELECT 声明? SELECT Id FROM Campaign WHERE Name LIKE '%A & B Campaign%'
?如果您只需要 1 个对象并且只有 Name 字段...(根据我的记忆,它将是 query() 方法而不是 search())
如果您有权访问您的 SF 组织,那么只需直接在其开发者控制台中进行实验 -> 例如查询编辑器