У меня есть этот кусок кода, который ищет название кампании:
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();
Вывод, который я получаю, — это идентификатор кампании, когда я перехожу на страницу, которая показывает, что с Campaign все в порядке, она показывает, что я искал.
Теперь, если я изменю это:
$campaign_name = 'A \& B Campaign';
В это:
$campaign_name = 'A \- B Campaign';
и запустить функцию test_search()
Я все еще получаю тот же идентификатор кампании, и мне бы хотелось, чтобы поисковый запрос проводил различие!
Есть идеи, почему это происходит и как это исправить?
Спасибо,
Одед
SOSL — это механизм полнотекстового поиска (я где-то читал, что он использует Apache Solr за кулисами). Он будет искать слова из вашей фразы, но вы не указали точное соответствие (это будет заключать термин в кавычки, FIND {"A \- B Campaign"}
). Он пытается быть умным, пропускать слишком короткие слова, учитывать разные суффиксы в грамматике английского языка и т. Д. Это нечеткий механизм поиска.
Или, возможно, вам нужен старый добрый оператор SELECT? SELECT Id FROM Campaign WHERE Name LIKE '%A & B Campaign%'
? Если все, что вам нужно, это 1 объект и только поля Name … (это будет метод query () из того, что я помню, а не search ())
Если у вас есть доступ к вашей SF-организации, просто поэкспериментируйте прямо в консоли разработчика -> Редактор запросов, например.
Других решений пока нет …