PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL usa tf-idf?

No. All'interno della funzione ts_rank, non esiste un metodo nativo per classificare i risultati utilizzando la loro frequenza globale (corpus). L'algoritmo di classificazione, tuttavia, si classifica in base alla frequenza all'interno del documento:

http://www.postgresql.org/docs/9.3/static /textsearch-controls.html

Quindi se cerco "cane|chihuahua" i seguenti due documenti avrebbero lo stesso rango nonostante la frequenza relativamente più bassa della parola "chihuahua":

"I want a dog"
"I want a chihuahua"

Tuttavia, la riga seguente verrebbe classificata più in alto rispetto alle due righe precedenti, perché contiene due volte nel documento il token stemmed "dog":

"dog lovers have an average of 1.5 dogs"

In breve:una frequenza dei termini più alta all'interno del documento si traduce in un rango più alto, ma una frequenza dei termini più bassa nel corpus non ha alcun impatto.

Un avvertimento:la ricerca del testo ignora le stop-word, quindi non corrisponderai a parole ad altissima frequenza come "the","a","of","for" ecc (supponendo che tu abbia impostato correttamente la tua lingua)