Форум: "Прочее";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
ВнизПоиск по строке аля посковика. Генераторы запроса. Найти похожие ветки
← →
OW © (2011-03-28 09:41) [0]Задумался как сделать поиск так, как в поисковиках.
Придумал так:
Делаем вьюху, в виде плоской таблицы относительно ключевого понятия, т.е. практически одна строка, все текст.
Нпример,
BOOK
Id Name
...
1 Шапокляк
3 Война и мир
..
INFO
ID BOOK_ID INFO
..
1 1 Детская про Шапокляк Гену и чебурашку
2 1 Отзыв читателей, в целом, положительный
3 3 Очень толстая
4 3 Бла-бла-бла-..
..
итого вьюха
...
1 Шапокляк Детская про Шапокляк Гену и чебурашку Отзыв читателей, в целом, положительный
3 Война и мир Очень толстая Бла-бла-бла-
...
--------------------------------------------------------------------------
Пользователь пишет строку, ее разбираем на отдельные слова
например
"Шапокляк отзывы" - Шапокляк, отзывы
весы для условий And = 2, or =1
Осталось запросить из дикой вьюхи (все по лайку по словам) с условием and и объединить с or, и отордерить по весу
пример
select S2.*
from (select A.ID_BOOK, max(Re) Re
from (select S.ID_BOOK, 2 Re
from vBOOK S
where S.SBOOK like "%Шапокляк%"
and S.SBOOK like "%отзывы%"
union
select S.ID_BOOK, 1 Re
from vBOOK S
where S.SBOOK like "%Шапокляк%"
or S.SBOOK like "%отзывы%") A
group by A.ID_BOOK) B
join vBOOK S2 on S2.ID_BOOK= B.ID_BOOK
order by Re desc
---------------------------------------------------------------
если три слова - составляем комбинации
A and B and C - вес 4
A or B and C - вес 3
A and B or C - вес 3
A and C or B - вес 3
A or B or C - вес 2
запрос не буду приводить, лень
==============================================
что пишу сюда, собственно..
а не сделал ли кто такое уже?
Собственно, расписав запрос для 3х слов, стало грустно писать его для 4х и более. Его можно было б и сгенерить, но уже голова не работала вчера, оставил на сегодня. А тут подумал спросить, может и не надо ничего делать..
(аля Sphinx: система полнотекстового поиска. - знаю, но нет, хочу сам)
← →
oldman © (2011-03-28 10:29) [1]
> Собственно, расписав запрос для 3х слов, стало грустно писать
> его для 4х и более.
А оптимизировать не? Рекурсией, например...
Или даже проще.
Есть N слов. Запросы:
1 or (2 and 3 ... N)
1 and 2 or (3 and 4 ... N)
...
1 and (2 or 3 ... N)
1 or 2 and (3 or 4 ... N)
...
Ну вес сам посчитаешь
← →
OW © (2011-03-28 11:10) [2]
> А оптимизировать не?
оптимизировать, да!
но как :)
> Или даже проще.
пока не понял
← →
oldman © (2011-03-28 11:12) [3]
> Задумался как сделать поиск так, как в поисковиках.
:)))
Ты еще задумайся - поисковики различают подряд идут слова или нет...
:)))
← →
oldman © (2011-03-28 11:18) [4]
> A or B and C - вес 3
> A and B or C - вес 3
> A and C or B - вес 3
> A or B or C - вес 2
имхо, в первых 3 or лишнее, поскольку 4.
Оптимизируй так для N слов:
поиск всех N
поиск всех комбинаций N-1
поиск всех комбинаций N-2
...
поиск всех комбинаций из 2 слов
поиск любого из N
← →
OW © (2011-03-28 11:19) [5]
> поисковики различают подряд идут слова или нет...
фигня,
если подряд - значит соотв. условия and ценнее по весу
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c