Как искать слова в непосредственной близости друг от друга в Snowflake? - PullRequest
1 голос
/ 04 мая 2020

Предположим, в моей таблице есть строковый столбец, т.е. VARCHAR(), каждая строка - это предложение. Я хочу найти в этом столбце предложения, в которых определенное слово находится в непосредственной близости от другого слова.

Например, если я хочу найти предложения, в которых есть «Джон» в пределах двух терминов «Смит», на SQL сервере я выполняю

SELECT row_id
FROM my_table
WHERE CONTAINS(sentence_column, 'NEAR((John, Smith), 2)') 

Как это переводится? в Снежинку?

1 Ответ

4 голосов
/ 05 мая 2020

Вы можете написать UDF для аппроксимации этого синтаксиса. Это не предназначено для воспроизведения синтаксиса рядом с сервера SQL, но показывает, как это можно сделать. Он работает только с пробелами для разрывов слов, но может быть изменен для поддержки других разрывов слов. Он нечувствителен к регистру. Если вы хотите, чтобы регистр был чувствителен, вы можете удалить методы toUpperCase ().

create or replace function NEAR(STR string, STR1 string, STR2 string, DISTANCE float)
returns boolean
language javascript
as
$$
    var firstWord = -1;
    var secondWord = -1;
    var words = STR.split(" ");
    for (var i=0; i < words.length; i++){
        if (words[i].toUpperCase() === STR1.toUpperCase()) firstWord = i;
        if (words[i].toUpperCase() === STR2.toUpperCase()) secondWord = i;
    }
    return (firstWord >= 0) && (secondWord >= 0) && (secondWord - firstWord <= DISTANCE)
$$;

select near('John Jacob Smith', 'John', 'Smith', 2);  --True
select near('John Jacob Williams Smith', 'John', 'Smith', 2);  --False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...