TSearch2 - взрыв точек - PullRequest
0 голосов
/ 11 мая 2011

После преобразования

SELECT to_tsvector('english', 'Google.com');

возвращает это:

'google.com':1

Почему движок TSearch2 не возвращает что-то подобное?

'google':2, 'com':1

Или как я могу заставить движок вернуть взорванную строку, как я писал выше?Мне просто нужно, чтобы "Google.com" был найден "Google".

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

К сожалению, быстрого и простого решения не существует.

Денис прав в том, что синтаксический анализатор распознает его как имя хоста, поэтому он не разбивает его на части.

Есть еще 3 вещи, которые вы можете сделать, с моей головы.

  1. Вы можете отключить разбор хоста в базе данных. Подробности смотрите в документации postgres . Например. что-то вроде ALTER TEXT SEARCH CONFIGURATION your_parser_config DROP MAPPING FOR url, url_path

  2. Вы можете написать свой собственный словарь.

  3. Вы можете предварительно проанализировать данные, прежде чем они каким-либо образом будут вставлены в базу данных (возможно, разбив все домены перед входом в базу данных).


У меня была похожая проблема с вами в прошлом году, и я выбрал решение (2) выше.

Мое решение состояло в том, чтобы написать собственный словарь, который разделяет слова на несловесные символы. Пользовательский словарь гораздо проще и быстрее написать, чем новый парсер. Вы все еще должны написать C tho :)

Словарь, который я написал, возвратил бы что-то вроде 'www.facebook.com':4, 'com':3, 'facebook':2, 'www':1' для домена «www.facebook.com» (у нас был сценарий уникальности, следовательно, 4 результата вместо 3).

Проблема с пользовательским словарем заключается в том, что вы больше не будете получать слова (например, www.books.com выйдет как www, books и com). Я полагаю, что есть некоторая работа (которая, возможно, была завершена), позволяющая создавать цепочки словарей, которые могли бы решить эту проблему.

1 голос
/ 11 мая 2011

Прежде всего, если вы не знаете, tsearch2 устарела в пользу встроенной функциональности:

http://www.postgresql.org/docs/9/static/textsearch.html

Что касается вашего фактического вопроса, то google.com распознается парсером как хост:

http://www.postgresql.org/docs/9.0/static/textsearch-parsers.html

Если вы не хотите, чтобы это происходило, вам необходимо соответствующим образом предварительно обработать ваш текст (или использовать собственный анализатор).

...