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

Вниз

Умный поиск по БД вместо фильтрации. Как реализовать?   Найти похожие ветки 

 
Kolan ©   (2009-04-09 16:08) [0]

Здравствуйте!

В приложении сотрудничающем с MS SQL Server 2000 нужно сделать возможность искать данные в базе. В базе результаты измерений всяких штук-дрюк :) Задача довольно простая. Данные разные в основном числа и строки.

Есть идея попробовать не делать обычной фильтрации, а заменить её поиском. То есть, вместо, скажем, выпадающего списка с фразами вроде «Измерения за сегодня» или там «Измерения, сделанные Васей» сделать просто поле ввода, которое бы искало данные по текстовому запросу, как Яндекс.

Хотелось бы спросить у вас какие вы видите технические возможности реализации желаемого? То есть: как это сделать?

Стоит уточнить, что разработка должна быть осуществлена в реальные сроки.

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


 
12   (2009-04-09 16:20) [1]

введеную строку разбить на слова, сделать like по всем полям всех таблиц, пересечь/заюнионить результаты по релевантности


 
Anatoly Podgoretsky ©   (2009-04-09 16:27) [2]

> Kolan  (09.04.2009 16:08:00)  [0]

Искать - Find/Locate можно на сервере, на клиенте можно делать только выборку. Для этого надо написать запрос на выборку по критерию. Информацию смотри в БОЛ, обрати внимание не полнотекстовый поиск, к сожалению многоформы для русского не работают. Ну и потребуется небольшой ИИ, которое можно узнать на Яндексе, если надо как Яндекс.


 
Sergey13 ©   (2009-04-09 16:28) [3]

> [0] Kolan ©   (09.04.09 16:08)
Поиск мелочи по карманам разительно отличается от поиска в том же яндексе, поэтому без уточнения конечной цели ответ на вопрос затрудняется.
"Искать по БД" это вообще несколько неправильная формулировка, ИМХО. Информация содержится (и ищется соответственно) в конкретных таблицах.

СУБД типа MSSQL умеют общаться с внешним миром ТОЛЬКО через SQL. Т.е. сформировав правильный запрос, ты получишь правильный ответ. Т.е. твоя задача сводится к построению правильных запросов.


 
Kolan ©   (2009-04-09 16:38) [4]

12, не это слишком просто — работать не будет.

Sergey13, идею вашу понял, тогда вопрос: как составить такой запрос? Как, к примеру, фразу «Вчерашние измерения» превратить в
SELECT * FROM Measurements WHERE CreationDate = 2008-04-08?

Анатолий, а что такое БОЛ и где его (её?) взять?


 
12   (2009-04-09 16:43) [5]

надо пользователям выдать составитель запросов
типа кнопки
Выбрать
Всех
больше
меньше
и т.п.
Пользователь тыкает кнопку Выбрать, у тебя sqltext:=\" select \" становится. так видел в одной программе.


 
12   (2009-04-09 16:43) [6]

БОЛ - book on line


 
Ega23 ©   (2009-04-09 16:46) [7]


> СУБД типа MSSQL умеют общаться с внешним миром ТОЛЬКО через
> SQL


С чего ты взял?


 
Anatoly Podgoretsky ©   (2009-04-09 16:52) [8]

> Kolan  (09.04.2009 16:38:04)  [4]

Book OnLine - можно взять на Микрософте или читать в Online, она поможет по части запросов и построение полнотекстовых поисков.

Но у тебя основная проблема будет с ИИ да еще как на Яндексе, а это Ноу Хау


 
Anatoly Podgoretsky ©   (2009-04-09 16:54) [9]

> 12  (09.04.2009 16:43:05)  [5]

Вообще то он хочет получить запрос из свободно формы, без выбора из предопределенного списка слов. Короче он претендует на докторскую, если не снизит аппетиты.


 
12   (2009-04-09 16:54) [10]

наоборот, в первом посте что сказал сложно реализовать
а вещь бы самому пригодилась


 
Anatoly Podgoretsky ©   (2009-04-09 16:58) [11]

> Ega23  (09.04.2009 16:46:07)  [7]

В общето это так, все остальное обман, видимость, фата моргана.


 
Игорь Шевченко ©   (2009-04-09 17:16) [12]


> То есть, вместо, скажем, выпадающего списка с фразами вроде
> «Измерения за сегодня» или там «Измерения, сделанные Васей»
> сделать просто поле ввода, которое бы искало данные по текстовому
> запросу, как Яндекс.


А что будет в текстовом поле в случае конкретно приведенных фраз ?


 
Ega23 ©   (2009-04-09 17:35) [13]


> В общето это так, все остальное обман, видимость, фата моргана.


BOL под рукой нет, но, вроде как, у них чуть ли не Direct Access возможен?
Или я с чем-то путаю?


 
sniknik ©   (2009-04-09 19:06) [14]

в ADO у рекордсета есть FingFirst/FindNext/...


 
Ega23 ©   (2009-04-09 19:40) [15]


> sniknik ©


Коля, есть у MSSQL какой-то интерфейс доступа кроме TSQL, или нет?
А то я что-то Подгорецкому не верю...  :)


 
sniknik ©   (2009-04-09 20:44) [16]

в смысле интерфейс? типа ADOX, доступ к базе на уровне структуры?
http://img410.imageshack.us/img410/1641/adox.jpg
это?


 
Sergey13 ©   (2009-04-10 08:58) [17]

> [7] Ega23 ©   (09.04.09 16:46)
> С чего ты взял?

А как еще?


 
Sergey13 ©   (2009-04-10 09:04) [18]

> [4] Kolan ©   (09.04.09 16:38)
> Sergey13, идею вашу понял, тогда вопрос: как составить такой
> запрос? Как, к примеру, фразу «Вчерашние измерения» превратить в
> SELECT * FROM Measurements WHERE CreationDate = 2008-04-08?

Мне видится только ИИ.


 
Ega23 ©   (2009-04-10 10:08) [19]


> А как еще?


С++, DiectAccess, серверный API...
Да этих интерфейсов по жизни - пруд пруди, просто в основной массе SQL везде используется.


 
Kolan ©   (2009-04-10 12:15) [20]


> А что будет в текстовом поле в случае конкретно приведенных
> фраз ?

Примерно тоже самое, только текстом, а не пунктом списка.

Вроде примерно понятно — нужен ИИ. Думаю написание ИИ не подойдет в плане сроков разработки. Где бы взять готовый? У того же яндекса есть Яндекс.Серввер (http://company.yandex.ru/technology/server/), но как его использовать в программе — не знаю, как и не знаю может ли он решить такую задачу или нет.

Может есть какие-то готовые средства?


 
Sergey13 ©   (2009-04-10 13:16) [21]

> [19] Ega23 ©   (10.04.09 10:08)

Я как то совсем этим не интересовался никогда. В двух словах, если не трудно (или ссылку какую для чайников) - а по какому принципу там выбираются данные?

сори за офтоп.


 
stas ©   (2009-04-10 13:18) [22]

Kolan ©   (10.04.09 12:15) [20]
см. FULLTEXTINDEX - полнотекстовый поиск, с русским он работает начиная с 2005 вроде.


 
Ega23 ©   (2009-04-10 13:26) [23]


> Я как то совсем этим не интересовался никогда. В двух словах,
>  если не трудно (или ссылку какую для чайников) - а по какому
> принципу там выбираются данные?


положа лапу на сердце, я альтернативами никогда не пользовался. Но.
В 2005 и 2006 году на конференции "Корпоративны базы данных" (http://citforum.ru/seminars/cbd2009/) было очень много разговоров именно об альтернативах SQL-ю.
Точно помню, что Caсhe (есть такая СУБД) заявляли о C++ интерфейсе и о DirectAccess. Точно помню, что о C++ интерфейсе заявлялось Postgres-ом (причём он там чуть ли не более первичен, чем SQL).
И есть смутные воспоминания, что на презентации MSSQL 2005 Артёмов что-то про альтернативы также говорил.
Сейчас презентацию качаю, посмотрю...


> сори за офтоп.


Да это как раз не оффтоп, по теме всё...


 
Игорь Шевченко ©   (2009-04-10 13:28) [24]


> Примерно тоже самое, только текстом, а не пунктом списка.


то есть, у тебя есть поле воода, ты туда вводишь "измерения за вчера" и оно должно выбрать все результаты, сделанные за предыдущий день от текущей даты ?

Блажен, кто верует, ему тепло на свете.


 
Ega23 ©   (2009-04-10 13:44) [25]

Вобщем так. В презентации что-то сказано о VB.NET и C#, но вот предоствляет ли MSSQL этот доступ через API или это некая прослойка, внутри которой один фиг TSQL сидит - я не понял (смотрел мельком).
Материалы конференции:
http://citforum.ru/seminars/index_db.shtml
Смотрел первый доклад за 2005 год.


 
Kolan ©   (2009-04-10 15:15) [26]

Игорь, а что тут мистического?

Есть ли еще предложения кроме полнотекстового поиска в MS SQL и самодельного ИИ?


 
Sergey13 ©   (2009-04-10 15:25) [27]

> [23] Ega23 ©   (10.04.09 13:26)
> [25] Ega23 ©   (10.04.09 13:44)

Спасибо, поковыряюсь на досуге.


 
Игорь Шевченко ©   (2009-04-10 15:33) [28]

Kolan ©   (10.04.09 15:15) [26]

Есть предложение. Не заниматься ИИ и не думать о такой возможности. Яндекс и прочие системы ищут по огромному индексу, который сами строят, тебе оно надо - в дополнение к имеющимся в базе данным строить еще невъ^H^H^H^Hбольшой индекс для целей, которыми будет пользоваться узкий круг ограниченных лиц, мучиться с встраиванием готового движка и прочими не менее увлекательными занятиями ?

Если уж так хочется предоставить "произвольный поиск", то неплохой совет дан в [1], хотя способ тормозной, но тут уже возможны варианты с индексом.

В любом случае (хоть я плохо представляю задачу) овчинка не стоит выделки


 
stas ©   (2009-04-10 17:20) [29]

см. [1]
Там без union можно, через field1 like "%slovo1%" or  field1 like "%slovo2%"
и так далее...



Страницы: 1 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.017 c
2-1239114286
микола
2009-04-07 18:24
2009.05.24
делфи и єксель


2-1239604199
Iriss
2009-04-13 10:29
2009.05.24
сохранение XMLDocument


2-1238959657
Alex112
2009-04-05 23:27
2009.05.24
К SQL-Server через ADO


15-1237471074
ТИМА
2009-03-19 16:57
2009.05.24
Формулы


2-1239083759
Нов_и_чок
2009-04-07 09:55
2009.05.24
Экспорт DBF в MDB