Почему в первом случае значение 0.6666667, а в двух других 0.5?
=# SELECT word_similarity('abc def', 'abc 123 def') as "similarity 1", word_similarity('abc def', 'abc 123 456 def') as "similarity 2", word_similarity('abc def', 'abc 123 456 789 def') as "similarity 3";
similarity 1 | similarity 2 | similarity 3
--------------+--------------+--------------
0.6666667 | 0.5 | 0.5
(1 row)
Здравствуйте, serjjj, Вы писали:
S>Почему в первом случае значение 0.6666667, а в двух других 0.5?
Если в кратце, то
word_similarity ( text, text ) → real
Возвращает число, представляющее наибольшую степень схожести между набором триграмм в первой строке и любым непрерывным фрагментом упорядоченного набора триграмм во второй строке. Подробнее об этом рассказывается ниже.
F.33. pg_trgm — поддержка определения схожести текста на основе триграмм
|W1 ∩ W2| / G , (1)
где
• W1 – набор слов первого аргумента,
• W2 – набор слов некоторого непрерывного отрезка слов второго аргумента,
• G – max(|W1|, |W2|).
Из всех возможных отрезков второго текста берётся тот, для которого значение (1) максимально.
Функция не симметрична: word_similarity(a,b) обычно ≠ word_similarity(b,a).
Первый текст совпадает сразу с двумя словами в единственном трёхсловном
отрезке 'abc 123 def' → 2/3.
• В более длинных строках эти два слова разделены, поэтому
наилучший отрезок содержит только одно совпадение из двух → 1/2.