Os documentos sobre a função word_similarity dizem:
Retorna um número que indica a semelhança da primeira string com a palavra mais semelhante da segunda string. A função procura na segunda string uma palavra mais semelhante e não uma substring mais semelhante. O intervalo do resultado é zero (indicando que as duas strings são completamente diferentes) a um (indicando que a primeira string é idêntica a uma das palavras da segunda string).
Mas eles são um pouco vagos sobre qual deve ser o resultado se a 'primeira string' contiver mais de uma palavra. Qual é a explicação para os seguintes resultados:
select word_similarity('foo bar','foo bar baz');
| palavra_semelhança | | :-------------- | | 1 |
select word_similarity('baz bar','foo bar baz');
| palavra_semelhança | | :-------------- | | 1 |
select word_similarity('baz foo','foo bar baz');
| palavra_semelhança | | :-------------- | | 0,8 |
dbfiddle aqui
Não funciona assim, a partir de um segmento de lista de discussão em 2017-2018
A solução foi lançar a versão
pg_trgm
1.4 com novos recursos que devem cair com o PostgreSQL 11. Ele fornecerástrict_word_similarity
o que forçará os limites de extensão a estarem nos limites das palavras. Além disso, haverá dois novos operadores<<<->
e<<%
que farão operações de extensão de palavra estrita no índice.Para obter mais informações, consulte os documentos sobre a versão de desenvolvimento do
pg_trgm