vGhost
Guest
Поиск подскажите алгоритм релевантности.
Вобщем суть проблемы, есть текстовая база.
textid, text
Нужно сделать поиске по полю текст.
http://detail.phpclub.ru/article/mysql_search не предлогать - видел, читал. Не катит. Тормозить будет.
FULLTEXT индексы тоже предлогать не стоит. Слишком большие объёмы информации.
mysql>SELECT `textid` FROM `content` WHERE MATCH(`content`) AGAINST ('good') limit 1000;
1000 row in set (15,11 sec)
А ежели сделать
mysql>SELECT Count(*) WHERE MATCH(`content`) AGAINST ('good') limit 1000;
ждать можно десятки минут.
IN BOOLEAN MODE штука хорошая, но юзер будет ограничен всего 1000 результатами (иначе слишком много результатов будет, на слово good например почти 200,000 совпадений). Посему эта 1000 должна быть наиболее релевантной так что IN BOOLEAN MODE тоже отпадает.
Идей такова:
табличка word: wordid word
табличка index: wordid textid, score
В табличке index хранится не более 1000 записей на каждый wordid (больше никак иначе база будет весить гигабайты) при появлении излишка удаляеся самая "не релевантная" и вставляется "более релевантная" запись.
А теперь суть проблемы:
ПОДСКАЖИТЕ АЛГОРИТ КАК ЭТУ РЕЛЕВАНТНОСТЬ РАСЧИТЫВАТЬ!
Или хотябы ссылки где почитать можно методы расчёта релевантности слова в тексте.
Пытал яндексом найти хоть что то. Хрен там. SEOшники весь инет засрали тем как оптимизировать титлы и мета теги на сайтах для поисковых систем Да ещё программы предлогают купить которые будут анализировать эти сайты с учётом хтмл и предсказывать ваши позиции в яндексах шмандексах и прочих.. А мне оно нафиг не нуно... Мне нужен сам алгоритм как считать эту весомость слова в тексте.
Подскажите кто что третий день мучаюсь ужо.
нечего умнее
$XF = 0.5;
$YF = 25;
$XP = 0.1;
$YP = 100;
$SCORE = ( ($Count / $Total > $XP) ? (-$Count / $Total) : ($Count / $Total) ) * $YP;
$SCORE += ( ($Pos / $Total > $XF) ? (1 - $XF) : (1 - ($Pos / $Total)) ) * $YF;
в голову пока не пришло
Люди добры, поможите кто чем может, сами мы не месные....
Вобщем суть проблемы, есть текстовая база.
textid, text
Нужно сделать поиске по полю текст.
http://detail.phpclub.ru/article/mysql_search не предлогать - видел, читал. Не катит. Тормозить будет.
FULLTEXT индексы тоже предлогать не стоит. Слишком большие объёмы информации.
mysql>SELECT `textid` FROM `content` WHERE MATCH(`content`) AGAINST ('good') limit 1000;
1000 row in set (15,11 sec)
А ежели сделать
mysql>SELECT Count(*) WHERE MATCH(`content`) AGAINST ('good') limit 1000;
ждать можно десятки минут.
IN BOOLEAN MODE штука хорошая, но юзер будет ограничен всего 1000 результатами (иначе слишком много результатов будет, на слово good например почти 200,000 совпадений). Посему эта 1000 должна быть наиболее релевантной так что IN BOOLEAN MODE тоже отпадает.
Идей такова:
табличка word: wordid word
табличка index: wordid textid, score
В табличке index хранится не более 1000 записей на каждый wordid (больше никак иначе база будет весить гигабайты) при появлении излишка удаляеся самая "не релевантная" и вставляется "более релевантная" запись.
А теперь суть проблемы:
ПОДСКАЖИТЕ АЛГОРИТ КАК ЭТУ РЕЛЕВАНТНОСТЬ РАСЧИТЫВАТЬ!
Или хотябы ссылки где почитать можно методы расчёта релевантности слова в тексте.
Пытал яндексом найти хоть что то. Хрен там. SEOшники весь инет засрали тем как оптимизировать титлы и мета теги на сайтах для поисковых систем Да ещё программы предлогают купить которые будут анализировать эти сайты с учётом хтмл и предсказывать ваши позиции в яндексах шмандексах и прочих.. А мне оно нафиг не нуно... Мне нужен сам алгоритм как считать эту весомость слова в тексте.
Подскажите кто что третий день мучаюсь ужо.
нечего умнее
$XF = 0.5;
$YF = 25;
$XP = 0.1;
$YP = 100;
$SCORE = ( ($Count / $Total > $XP) ? (-$Count / $Total) : ($Count / $Total) ) * $YP;
$SCORE += ( ($Pos / $Total > $XF) ? (1 - $XF) : (1 - ($Pos / $Total)) ) * $YF;
в голову пока не пришло
Люди добры, поможите кто чем может, сами мы не месные....