Мне было интересно, есть ли способ поиска значения без акцента в SOQL, и результаты будут приносить мне слова с акцентом и без него.

Пример: я искал "привет" и в результате получил записи, в которых есть "привет" и "привет". Или я искал «привет», и в результате я получил записи, в которых есть «привет» и «привет».

Примечание: я знаю, что в SOSL этот поиск работает, но в дополнение к тому, что я просил, мне также нужно искать слова, которые содержат мою искомую строку. И что SOSL "НАЙТИ" не дает. Он ищет только слова, которые НАЧИНАЮТСЯ с искомого значения.

Затем я мог бы выполнить поиск: «привет», и в результате я бы также нашел такие слова, как «тишелло», «тестхелло» или «тишелло», «тестелло»...

Спасибо.

1
Diego Edargo Pessoa 19 Ноя 2019 в 19:56

2 ответа

Лучший ответ

В отличие от SOSL, SOQL не поддерживает сопоставление символов с диакритическими знаками, в то время как SOSL не может выполнять сопоставление условий поиска внутри слов (только в начале). Работа ложится на вас, как на разработчика, чтобы заполнить пробелы.

Вы можете проанализировать строку (повторить введенное значение), чтобы найти все символы за пределами диапазона символов ASCII и заменить их в значении, переданном в SOQL, с помощью "_" (односимвольный подстановочный знак при использовании с LIKE). Это (по всей вероятности) вернет много ложноположительных результатов совпадения. Однако вы можете встроить в свой код генерацию регулярных выражений «фильтра», которые могут отсеять ложные срабатывания из полученных вами результатов.

Этот вопрос касается того, как сопоставить символы с диакритическими знаками с символами ASCII. Это может быть основой для создания фильтров, чтобы вы могли генерировать совпадения регулярных выражений, например:

hell[oó]

При фильтрации результатов вашего SOQL-запроса на основе LIKE.

1
Phil W 19 Ноя 2019 в 20:13

Возможным обходным решением может быть создание настраиваемых полей и их автоматическое заполнение тем же текстом, но без диакритических знаков. А затем стандартизируйте ввод и используйте запрос SOQL, отфильтрованный в этом настраиваемом поле.

0
Novarg 20 Ноя 2019 в 13:19