Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1301559093
Matveih1
2011-03-31 12:11
2011.07.10
DBGridEh и AutoFitColWidths


15-1300829404
Юрий
2011-03-23 00:30
2011.07.10
С днем рождения ! 23 марта 2011 среда


4-1243935428
Unknown user
2009-06-02 13:37
2011.07.10
Стек вызовов


2-1301506475
Учусь
2011-03-30 21:34
2011.07.10
Как обновить отображение компонента на форме?


10-1175362315
Qds
2007-03-31 21:31
2011.07.10
Таймаут в DCom





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский