powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / поиск с сортировкой по весу слова
11 сообщений из 11, страница 1 из 1
поиск с сортировкой по весу слова
    #32796615
crumb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрасте снова.

Есть 2 таблички, первая - это индекс всех файлов, 1 запись - 1 файл, вторая - это все слова которые встречаються в файле (word) и сколько раз слово встретилось в документе (weight):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE `file_index` (
  `id` int( 10 ) unsigned NOT NULL auto_increment,
  `file` tinytext NOT NULL,
  `key_words` text NOT NULL,
  `date_mod` datetime NOT NULL default '0000-00-00 00:00:00',
  `words` int( 10 ) unsigned NOT NULL default '0',
  `size` int( 11 ) NOT NULL default '0',
  `title` tinytext NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `date_mod` (`date_mod`),
  KEY `size` (`size`),
  KEY `file` (`file`( 255 ))
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS= 1 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `key_index` (
  `id` int( 10 ) unsigned NOT NULL auto_increment,
  `id_index` int( 10 ) unsigned NOT NULL default '0',
  `word` tinytext NOT NULL,
  `position` int( 11 ) NOT NULL default '0',
  `weight` tinyint( 4 ) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `id_index` (`id_index`),
  FULLTEXT KEY `word` (`word`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251

Связь по file_index.id, key_index.id_index, один к многим.

Нужно найти все файлы (files), искать по полю word (может быть несколько слов в строке запроса, также разные условия между этими словами (AND, OR)) и отсортировать по weight DESC, т.е. чем больше слов в файле, тем выше.
Да и если несколько слов для поиска, то нужно учитывать суммарный вес этих слов, а потом ORDER BY weight DESC ,вот.

Как подойти к этому, MySQL 4.1.7-max-log, PHP 4
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32796742
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А fulltext индекс тебе не подойдет?
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32796759
crumb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело не в скорости, доло в моделировании самого запроса для выборки ...
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32796885
swept
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
честно пытался сказать что-нибудь полезное, но так и смог понять в чем же собственно суть проблемы
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32798474
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читай раздел 12.6 Full-Text Search долго и внимательно. Match уже может выдавать степень сходства списка слов со строкой. Там в комментах показана возможность сортировки по релевантности:
Код: plaintext
1.
2.
SELECT MATCH('Content') AGAINST ('keyword1 keyword2') as Relevance
FROM table1 WHERE MATCH('Content') AGAINST('+keyword1 +keyword2'
IN BOOLEAN MODE) HAVING Relevance >  0 . 2  ORDER BY Relevance DESC;
если хочешь вычислять релевантность с учётом весов... не судьба, она вычисляется жёстким алгоритмом, зашитым в мускуль, точный вид алгоритма мне не известен. Либо юзай мусклевые способности, либо реализуй полнотекстовый поиск лапками.

ma X mo
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32798580
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а... эээ... ну я понял, что тебе надо.
точно, в чём проблема?
ты хочешь всю процедуру запихнуть в один запрос? Не выйдет.

ma X mo
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32798597
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала, как ты собираешься считать вес?
если выполнение условия pred1 даёт вес weight1, а pred2 - weight2, то какой вес даёт выполнение условий (pred1 AND pred2) и (pred1 OR pred2)?

ma X mo
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32798663
crumb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы ...

Я тоже прохожу к выводу что буду юзать полнотекстный поиск MySQlя, так можно побороть релевантность.

>>то какой вес даёт выполнение условий (pred1 AND pred2) и (pred1 OR pred2)?
здесь я думал при условии AND сумму весов обоих слов, а при OR брать наибольшее из возможных ...

А вот если нужно учитывать расстояни между словами по которым идет поиск, например чтоб между словами может быть не более 5 слов .... ?
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32799293
crumb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще, в этом запросе как происходит непосредственно поиск и сортировка, ищеться по MATCH('Content') AGAINST('+keyword1 +keyword2' IN BOOLEAN MODE) ???
Код: plaintext
1.
2.
3.
4.
SELECT MATCH('Content') AGAINST ('keyword1 keyword2') as Relevance
FROM table1 
WHERE MATCH('Content') AGAINST('+keyword1 +keyword2' IN BOOLEAN MODE) 
HAVING Relevance >  0 . 2  ORDER BY Relevance DESC;

Разве так можно делать, или все таки MATCH(...) AGAINST (...) должны быть одинаковые везде ???
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32802858
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crumbЯ тоже прохожу к выводу что буду юзать полнотекстный поиск MySQlя, так можно побороть релевантность.а что, уже не хочешь сделать свой поиск?

crumbя думал при условии AND сумму весов обоих слов, а при OR брать наибольшее из возможных ...почитай про оператор IF, думаю, можно будет переделывать оригинальный запрос чем-нить вроде регулярного выражения в набор условий для MySQL.

crumbА вот если нужно учитывать расстояни между словами по которым идет поиск, например чтоб между словами может быть не более 5 слов .... ?в принципе у тебя уже есть position, поэтому расстояние между словами можно мерять в этих позишнах.

Насчёт сортировки по релевантности - хз, если честно. Поэкспериментируй.
...
Рейтинг: 0 / 0
поиск с сортировкой по весу слова
    #32803224
crumb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно конечно изобретать велосипед, но если это уже реализовано, и довольно неплохо .... мне главный критерий это релевантность найденного, уж больно много докуметов собралось.

Позицию между словами теперь уже хочеться учитывать в поиске средствами базы :) ...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / поиск с сортировкой по весу слова
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]