搜索查询,不区分特殊字符,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 组织,那么只需直接在其开发者控制台中进行实验 -> 例如查询编辑器