Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.10;
Скачать: CL | DM;

Вниз

Поиск по строке аля посковика. Генераторы запроса.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1300947227
И. Павел
2011-03-24 09:13
2011.07.10
Печать нескольких RAV-проектов на одной странице


2-1301675364
Gu
2011-04-01 20:29
2011.07.10
PhysicalDrive


2-1301910133
Magedon
2011-04-04 13:42
2011.07.10
COM: обработка исключительных ситуаций


10-1175061542
ustas
2007-03-28 09:59
2011.07.10
InternetExplorer.Application link Click


2-1301917302
Mishutka
2011-04-04 15:41
2011.07.10
Как перехватить момент передачи сообшения в COM Port