搜索查询,无区分特殊字符,SOQL

时间:2018-02-04 19:11:30

标签: php salesforce 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,我希望搜索查询能够做出区分!

知道为什么会这样,以及如何解决?

谢谢, 乌迪德

1 个答案:

答案 0 :(得分:2)

SOSL是一个全文搜索引擎(我已经在某处使用Apache Solr在后台阅读)。它会从您的短语中搜索单词,但您没有指定完全匹配(将该术语包含在引号中,FIND {"A \- B Campaign"})。它试图变得聪明,跳过太短的单词,在英语语法中考虑不同的后缀等等......它是一个模糊的匹配引擎。

或许您需要的是普通的旧SELECT语句? SELECT Id FROM Campaign WHERE Name LIKE '%A & B Campaign%'?如果您只需要1个对象而且只有名称字段...(它将是我记忆中的查询()方法,而不是搜索())

如果您有权访问您的SF组织,那么只需直接在其开发者控制台中进行实验 - &gt;查询编辑器例如