Автор Тема: FULLTEXT и релевантность  (Прочитано 5423 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FULLTEXT и релевантность
« : 24 Октября 2006, 20:24:27 »
Ребята, я знаю что подобные темы уже поднимались не раз, но я считаю, что в праве создать новую.

Вопрос номер 1:

Есть интернет-магазин с очень большим числом записей (товары). Мне нужно сделать поиск по всему этому добру. Дело в том, что если у меня есть товары

1. мелкая хрень
2. мелкая штука
3. штука дрюка

и я ввожу в строку поиска "шту юка", то я должен получить это:

1. штука дрюка
2. мелкая штука
3. мелкая хрень

Во всяком случае - на первом месте именно "штука дрюка".

По этой причине я не могу использовать булеантовский поиск (BOOLEAN MODE) или лайк (LIKE) ибо они не дают релевантности. А другие виды поиска в MySQL соответственно не найдут такие слова (они ищут их полностью - то есть по запросу "штука" выдастся 2 результата, а по запросу "шту" - ни одного!).

Что делать, как сделать поиск с релеваностью, но на подобии LIKE (т.е. со спец. символами типа %, обозначающими "любые символы")?

Есть какой-нибудь способ, готовое решение?



Вопрос номер 2:

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

Например, пробежать каждую строку в базе, каждую запись. Для нее посчитать кол-во совпадающих символов со строкой запроса, организовать табличку (или массив?!), куда записать релевантность (свою), а потом вывести ее, отсортированную, и удалить таблицу? А не извращение ли? Умные дядьки так делают?.. Но ведь записейт может быть и 500.000 и 1.000.000... Это же год пройдет.

UPD: Перерыл очень много всего в интернете и в мануале. Ответа не нашел.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
FULLTEXT и релевантность
« Ответ #1 : 24 Октября 2006, 22:01:02 »
1. делаешь выборку по шту, выборку по юке и потом отбираешь результаты - на первые места выставляешь те результаты, которые есть в обоих поисках (ну а ниже то где есть вхождение чего-нибудь одного)

2. да ты прав, извращенец
 в исканиях.

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FULLTEXT и релевантность
« Ответ #2 : 24 Октября 2006, 23:35:28 »
1. Ты имеешь в виду используя пункт 2 или какими-то стандартными средствами MySQL (SQL)?

2. Елки... А если два человека начнут искать одновременно?.. Один таблицу создал, а ведь второй уже не может. Твои предложения?

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
FULLTEXT и релевантность
« Ответ #3 : 25 Октября 2006, 00:32:12 »
DimoninG2
1 я имею ввиду обычный поиск по базе
 http://www.opennet.ru/base/dev/mysql_pgsql_search.txt.html

2 по этому пункту я имел ввиду, что ты предложил извращенный вариант.
Умные дядьки используют для этого индексирование, и ищут по индексу (обратному индексу (Inverted Index); слово => запись в бд где оно упоминается) и на основании этого уже ранжируют
http://company.yandex.ru/articles/article10.html
 в исканиях.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
FULLTEXT и релевантность
« Ответ #4 : 25 Октября 2006, 15:20:19 »
Green Kakadu
велосепидистов поощеряешь? :)
And no religion too...

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FULLTEXT и релевантность
« Ответ #5 : 27 Октября 2006, 00:21:08 »
Green Kakadu

1. Знаком. Он мне и не подходит :)

2. Гм... У меня там описания компьютеров. По такой каше искать индексом - это изврат, ИМХО... Другого способа нет ускорить процесс поиска?..

commander

Это кто? )

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
FULLTEXT и релевантность
« Ответ #6 : 27 Октября 2006, 21:35:14 »
DimoninG2
Цитировать
DimoninG2:
2. Гм... У меня там описания компьютеров. По такой каше искать индексом - это изврат, ИМХО... Другого способа нет ускорить процесс поиска?..

для того что было описано в самом первом посте оба способа подходят. Если речь идет о товаре (типа комп) и по специальному поиску по его свойствам (типа детали, габариты,цвет и т.д.) то тут уж лучше завязываться на то, как это все хранится;
если хранится все в куче? то никто не мешает построить по этой куче индекс и искать по нему, если же есть какая-то более вразумительная модель хранения данных, то блин ;) сами решайте что и по каким полям стоит искать, а что нет
 в исканиях.

Оффлайн DimoninG2

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
FULLTEXT и релевантность
« Ответ #7 : 27 Октября 2006, 22:19:31 »
Понятно. В любом случае стало яснее. Спасибо :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28