Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];

Вниз

нечеткий поиск в БД   Найти похожие ветки 

 
картман ©   (2010-09-17 00:46) [0]

Всем привет и рабочего настроения!

Нужно организовать поиск строки по нескольким ключевым значениям, которые могут быть неверно написаны:

select * from table where col1=val1 and col2=val2,

col1 и col2 - строки

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

select * from table where col1=val1 and col2=val2
, тогда выдаем:
select * from table where col1=val1

 Поиск нужно осуществлять максимально быстро(точную границу пока не знаю, но могу предположить, что не больше секунды).

 Не посылайте в гугл - был там, идей набрался... мне нужно узнать, в какую сторону идти правильнее всего, точнее, как определить,  куда вернее - сама методика поиска пути.  Ну, или за руку, если не лень:)

 Ху из ху в параметрах, вроде ясно - попробую с помощью нейросети, а вот как быть с ошибочно переданными строками?


 
12 ©   (2010-09-17 08:40) [1]

определять СУБД должна, а тут не указана.
для oracle полнотекстовый поиск у нас используется.
Сфинкс - есть такая приблуда.


 
Ega23 ©   (2010-09-17 08:53) [2]

Google + документация по твоей СУБД + (FullTextSearch + DataMining + F1)


 
картман ©   (2010-09-17 12:20) [3]


> 12 ©   (17.09.10 08:40) [1]



> Ega23 ©   (17.09.10 08:53) [2]


скажем тут: http://maps.yandex.ru/ используется вами названные технологии?


 
Ega23 ©   (2010-09-17 12:23) [4]


> используется вами названные технологии?


Да. Инфа 100%. От знакомых девелоперов из Яндекса.


 
Ega23 ©   (2010-09-17 12:23) [5]

Т.е. там несколько сложнее, но FTS и DataMining используются.


 
картман ©   (2010-09-17 12:50) [6]


> Ega23 ©   (17.09.10 12:23) [5]
>
> Т.е. там несколько сложнее,


А можно чуть подробнее?

Пару дней назад искал там "строителей липец", имея в виду "Липецк, Строителей" - не находил, а сегодня находит, зараза! Интересно, обучение автоматом организовано?


 
Anatoly Podgoretsky ©   (2010-09-17 12:55) [7]

> картман  (17.09.2010 12:50:06)  [6]

Какое автоматом, ты же вчера искал, вот и он тоже.


 
картман ©   (2010-09-17 12:58) [8]


> Какое автоматом, ты же вчера искал, вот и он тоже.


да, чета он не очень... может в угоду быстродействию? "оренб" находит Оренбург, а "оренб челюскинцев" - нифига. Хм, завтра посмотрим, выучит ли дз.


 
Ega23 ©   (2010-09-17 13:05) [9]


> А можно чуть подробнее?

Google + документация по твоей СУБД + (FullTextSearch + DataMining + F1)
Там всё.


 
картман ©   (2010-09-17 13:10) [10]


> Ega23 ©   (17.09.10 13:05) [9]


> документация по твоей СУБД

а нету ее у меня! Сейчас узнал, что надо бы сделать без привязки к конкретной СУБД.


 
Ega23 ©   (2010-09-17 13:13) [11]


> Сейчас узнал, что надо бы сделать без привязки к конкретной СУБД.

Плюнь в лицо постановщику задачи.


 
картман ©   (2010-09-17 13:17) [12]


> Плюнь в лицо постановщику задачи.

ммм... нет, попробую свои индексы создавать.


 
Ega23 ©   (2010-09-17 13:19) [13]


> ммм... нет, попробую свои индексы создавать.


ИМХО проще апп.сервер с модулями для работы с разными СУБД.
Не считай одного себя умнее большой команды разработчиков ORacle, MSSQL, Postgres и т.д.


 
Медвежонок Пятачок ©   (2010-09-17 13:23) [14]

левенштейн здесь очень хорошо будет в помощь


 
картман ©   (2010-09-17 13:24) [15]


> Не считай одного себя умнее

не считаю, но очень хочется:-[


 
картман ©   (2010-09-17 13:25) [16]


> Медвежонок Пятачок ©   (17.09.10 13:23) [14]

ну да, только я ж его не прикручу к их индексам?


 
Anatoly Podgoretsky ©   (2010-09-17 13:43) [17]

> картман  (17.09.2010 13:10:10)  [10]

без привязки к конкретной СУБД нельзя


 
Anatoly Podgoretsky ©   (2010-09-17 13:43) [18]

> картман  (17.09.2010 13:17:12)  [12]

Тогда в тебя плевать будут.


 
Anatoly Podgoretsky ©   (2010-09-17 13:44) [19]

> картман  (17.09.2010 13:25:16)  [16]

Нечеткий поиск должен уметь работать с морфологией


 
картман ©   (2010-09-17 13:45) [20]


> Anatoly Podgoretsky ©   (17.09.10 13:43) [18]
>
> > картман  (17.09.2010 13:17:12)  [12]
>
> Тогда в тебя плевать будут.


иногда, чтобы что-то сделать, нужно об этом не знать


 
картман ©   (2010-09-17 13:46) [21]


> Anatoly Podgoretsky ©   (17.09.10 13:44) [19]
>
> > картман  (17.09.2010 13:25:16)  [16]
>
> Нечеткий поиск должен уметь работать с морфологией

морфология не нужна - нужно лишь учитывать описки и ошибки - "масква", "парашут", например


 
Ega23 ©   (2010-09-17 13:59) [22]


> морфология не нужна - нужно лишь учитывать описки и ошибки
> - "масква", "парашут", например

А что это, если не морфология?
И "въезд" и "выезд" - это как бэ разные вещи. И "пОра" и "порА".


 
stas ©   (2010-09-17 14:03) [23]

картман ©   (17.09.10 13:46) [21]
ничего себе! лишь...


 
картман ©   (2010-09-17 14:09) [24]


> Ega23 ©   (17.09.10 13:59) [22]


> А что это, если не морфология?

ну, вроде морфология много чего в себя включает(никак не мог в школе запомнить, что есть морфологии, синтаксисы, грамматики и т.п.)


> stas ©   (17.09.10 14:03) [23]

ну, а чего там? Хеммингово расстояние, либо левенштейна.... дело лишь за работой с бд - чтобы шустро.


 
Anatoly Podgoretsky ©   (2010-09-17 14:14) [25]

Тогда soundex, левенштейн и подобное.


 
Anatoly Podgoretsky ©   (2010-09-17 14:15) [26]

> картман  (17.09.2010 14:09:24)  [24]

многоформы


 
stas ©   (2010-09-17 16:54) [27]

Это да конечно, но если без привязки к СУБД, как написать функцию?


 
Ega23 ©   (2010-09-17 17:01) [28]


> ну, а чего там? Хеммингово расстояние, либо левенштейна.
> ... дело лишь за работой с бд - чтобы шустро.


Не всё так просто.


 
картман ©   (2010-09-17 17:19) [29]


>
> Не всё так просто.

да уж... пока, думаю, надо как-то так хитро строки переводить в числа... но в какие?


 
Ega23 ©   (2010-09-17 17:26) [30]

Залезь на Postgres-Commutiny, коды открыты (она вообще как BSD), а FTS там крайне мощный и гибко настраиваемый.


 
картман ©   (2010-09-17 17:35) [31]


> Ega23 ©   (17.09.10 17:26) [30]

спс, гляну


 
Mystic ©   (2010-09-17 18:14) [32]

> без привязки к конкретной СУБД нельзя

Можно. У нас похожая задача, решение примерно такое: по крону стоит скрипт, который парсит результаты SQL-запросов и формирует файл данных. И есть демон, который гуляет по этому файлу и выбирает нужные данные. Без всяких индексов в лоб перебор примерно 3 000 000 записей с анализом занимает 0.5 секунд, в то время как всякие сфинксы просто не справляются с нагрузкой и не все могут.


 
картман ©   (2010-09-17 18:37) [33]


> по крону стоит скрипт, который парсит результаты SQL-запросов
> и формирует файл данных.

не понял - скрипт собирает нужные данные по неточным входным? Обучение получается?


 
Ламо777 ©   (2010-09-17 20:06) [34]


> Mystic ©   (17.09.10 18:14) [32]

Немного не понял - можно подробнее?
Вы не индексируете базу, а выскиваете insert и update операции в БД, и индексируете только изменение данных?


 
Юрий Зотов ©   (2010-09-18 17:27) [35]

Может быть, что-то простенькое, типа:

select * from table where
(
(col1 like %val1% or col1 like %val2%)
and
(col2 like %val1% or col2 like %val2%)
)
or col1 like %val1%


 
картман ©   (2010-09-18 20:52) [36]


> Юрий Зотов ©   (18.09.10 17:27) [35]

да Вы оптимист:)


 
Mystic ©   (2010-09-20 12:17) [37]

> Ламо777 ©   (17.09.10 20:06) [34]

В общих чертах

(1) Придумываю собственный формат файла данных, по которому было бы очень удобно проводить поиск (например, полным перебором)
(2) По крону запускается индексатор, который
 (2a) получает данные из базы (сейчас это простое выполнение SQL-запросов с сохранением в файлы)
 (2b) по этим данным строит индексный файл
 (2c) проецирует его в память
(3) Существует демон, который висит на порту, получает запросы, пробегается по файлу данных и формирует нужный результат.


 
Ega23 ©   (2010-09-20 13:06) [38]


> Может быть, что-то простенькое, типа:

Это очень долго, а также релевантность не учитывается.
Например, "Москва", "Масква", "Moscow", "Moskva" и т.п.



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

Форум: "Прочее";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.005 c
2-1286375678
AnGel
2010-10-06 18:34
2011.01.02
как узнатьть на какой созданный компонент нажал пользователь?


15-1285063413
bss
2010-09-21 14:03
2011.01.02
IXMLDomDocument, как получить полный текст XML?


15-1285062621
DiamondShark
2010-09-21 13:50
2011.01.02
3Д-экшон суть такова...


2-1286465222
lewka
2010-10-07 19:27
2011.01.02
Получение пути к файлу


15-1284971610
tesseract
2010-09-20 12:33
2011.01.02
Свершилось товарищи. ShareWare процессор.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский