Подситывание кол-ва совпадений при поиске

TRL

Новичок
Подситывание кол-ва совпадений при поиске

Есть запрос на поиск введённого текста, но текст разбивается по словам и поиск происходит для каждого слова.

Всё это одним запросом... Так вот, можно ли какм-то образом подсчитать кол-во совпадений для каждого слова? Вообще можно, но хотелось бы как-то боле менее по нормлаьному, а не делать по лишние запросы, т.е. не делать отдельно запросы по каждому слову, что бы кол-во определить.

Это нужно для поднятие позиции найденого контента! Есть у кого какие мысли?
 

Кром

Новичок
Посмотри полнотекстовый поиск. Там есть понятие рейтинга найденной строки.
 

TRL

Новичок
да и ещё... в зависимости от кол-ва совпадений нужно ещё и сортировать....

через переменные нельзя никак?
 

TRL

Новичок
Кром! Ок. Сенкс, ща гляну!

-~{}~ 06.10.06 15:26:

ммм.... теперь пробьлема с полнотекстовым поиком :(

#1191 - Can't find FULLTEXT index matching the column list

Мож кто подскажет шо ему не нравится?
PHP:
SELECT * FROM site_indexing WHERE MATCH(SiteUrl, SiteName, SiteDescription, SiteKeywords, ContentCache) AGAINST('сайт зачем дней') AND SiteBan = '0' ORDER BY Special, Advert, SearhRating ASC LIMIT 0, 20
-~{}~ 06.10.06 15:39:

Вот нашёл ещё один выход на форуме здесь:

PHP:
SELECT *, 
(SiteUrl LIKE '%секс%')
+ (SiteName LIKE '%секс%')
+ (SiteDescription LIKE '%секс%')
+ (SiteKeywords LIKE '%секс%') AS relevant
FROM site_indexing WHERE (SiteUrl LIKE '%секс%')
OR (SiteDescription LIKE '%секс%')
OR (SiteKeywords LIKE '%секс%') OR SiteName LIKE '%секс%' AND SiteBan = '0' ORDER BY Special, Advert, relevant, SearhRating ASC LIMIT 0, 20
Кол-во совпадений посчитует в relevant

Остаётся вопрос, насколько больше ресурсов потребует такой запрос :)) чем матч
 

Кром

Новичок
#1191 - Can't find FULLTEXT index matching the column list
Мож кто подскажет шо ему не нравится?
Возьми словарь и переведи.

>Вот нашёл ещё один выход на форуме здесь
Это не очень удачный вариант. С увеличение данных будет сильно тормозить.
 

TRL

Новичок
Мдя..

#1191 - Не найду FULLTEXT индекс matching в списке колонок

Что-т в этом роде...

Но дело в том, что я поставил на поля ФУЛТЕКСТ! Может я что-то не так понял....

Вот табличка моя:

PHP:
CREATE TABLE `site_indexing` (
  `IndexID` int(10) unsigned NOT NULL auto_increment,
  `SiteUrl` varchar(255) NOT NULL default '',
  `SiteName` varchar(150) NOT NULL default '',
  `SiteDescription` varchar(200) NOT NULL default '',
  `SiteKeywords` varchar(100) NOT NULL default '',
  `ContentCache` longtext NOT NULL,
  ***************************
  FULLTEXT KEY `SiteName` (`SiteName`),
  FULLTEXT KEY `SiteDescription` (`SiteDescription`),
  FULLTEXT KEY `SiteKeywords` (`SiteKeywords`),
  FULLTEXT KEY `ContentCache` (`ContentCache`),
  FULLTEXT KEY `SiteUrl` (`SiteUrl`)
) TYPE=MyISAM AUTO_INCREMENT=218 ;
Экспортнул с БД... поэтому за ковычки не критиковать :) табличку обрезал малех... здесь...

-~{}~ 07.10.06 01:48:

вроде разобрался... заработал поиск...

Но есть ещё одно но в этом способе поиска :)

Вот выдержка из книги:
------------------------------------------------------------
Описанная техника подсчета лучше всего работает для больших наборов текстов (фактически она именно для этого тщательно настраивалась). Для очень малых таблиц распределение слов не отражает адекватно их смысловое значение, и данная модель иногда может выдавать некорректные результаты.

PHP:
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');
Empty set (0.00 sec)
Поиск по слову ``MySQL'' в предыдущем примере не приводит к каким-либо результатам, так как это слово присутствует более чем в половине строк. По существу, данное слово целесообразно трактовать как стоп-слово (т.е. слово с нулевой смысловой ценностью). Это наиболее приемлемое решение - запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1Гб.
------------------------------------------------------------

Так вот, что же всётаки лучше? С одной тороны, меньше малопохожих документов, с другой стороны плохо, т.к. иногда нужно всё выдавать!

Пробовал с малозаполненной таблицой - запрос пустое значение выдаёт...

-~{}~ 07.10.06 17:23:

в общем потестил я полнотекстовый поиск и остался е доволен... верней доволен, но не всем... Да ищет быстро, сортирует атвоматом, но есть одно громадное "НО"... Сейчас в базу апихнул 300 документов, страничек - титлы, кейводсы, дески и т.п. из реальных 50 документов находит только в одном совпадения... :)) из 50 - всмысле вручную смотрел в каких документах есть подобные слова...

Так, что прийдётся наверно юзать LIKE... Мож пожертвовать местом для БД... т.е. забивать в одну строчку все данные с титла, деска, кейворда... Конечно глупо смотрится, а шо делать.... всётаки побыстрее будет искать с одного поля, чем с 5-ти :)
 

Кром

Новичок
Ты можешь поэкспериментировать с параметром IN BOOLEAN MODE, у него нет порога на количество похожих слов в одном тексте, так что это, я думаю, будет ближе к тому что тебе нужно.
 

TRL

Новичок
секнкс... я как-то на него и не обратил внимания :)
А ща работает с REGEXP

Кстати что бістрее работает REGEXP или LIKE?

Пример работы можно посомтреть здесь: adultgo.info
 

phprus

Moderator
Команда форума
TRL
Чее? С каких пор регулярные выражения быстрее поиска в строке?
 
Сверху