Для этого вы также можете использовать функцию текстового поиска PostgreSQL, например:
SELECT * FROM ts_stat('SELECT to_tsvector(''hello dere hello hello ridiculous'')');
даст:
word | ndoc | nentry
---------+------+--------
ridicul | 1 | 1
hello | 1 | 3
dere | 1 | 1
(3 rows)
(PostgreSQL применяет зависящие от языка основы и удаление стоп-слов, что может быть тем, что вам нужно, а может и нет. Удаление стоп-слов и создание основы можно отключить с помощью simple
вместо словаря english
, см. ниже.)
Вложенный оператор SELECT
может быть любым оператором select, который возвращает столбец tsvector, поэтому вы можете заменить функцию, которая применяет функцию to_tsvector
к любому количеству текстовых полей, и объединить их в один tsvector
, по любому подмножеству ваших документов, например:
SELECT * FROM ts_stat('SELECT to_tsvector(''english'',title) || to_tsvector(''english'',body) from my_documents id < 500') ORDER BY nentry DESC;
Получил бы матрицу общего количества слов, взятых из полей title
и body
первых 500 документов, отсортированных по убыванию числа вхождений. За каждое слово вы также получите количество документов, в которых оно встречается (столбец ndoc
).
Для получения более подробной информации см. Документацию: http://www.postgresql.org/docs/current/static/textsearch.html