|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
|
Умный поиск по БД21.09.2015, 16:33. Показов 4705. Ответов 18
Метки нет (Все метки)
Доброго времени суток.
Как реализовать умный поиск по бд mysql, в следуюшем виде. К примеру в базе есть названия песен и их исполнителей: Михаил круг - песня 1 Михаил круг - песня 2 Михаил круг - песня 3 Человек в поиске может ввести Михаил круг круг михаил мммиихаил мхал крг псня 1 песня 1 Можно ли это реализовать? и конечно же как?) спасибо заранее, буду рад наставлению на пусть истенный
0
|
|
| 21.09.2015, 16:33 | |
|
Ответы с готовыми решениями:
18
умный поиск текста Умный поиск по сайту |
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 14:36 | |
|
Я бы разбил пользовательский запрос на символы (например "мхал крг" -> м х а л к р г) и использовал каждый символ для поиска
Пример запроса select Композиции from таблица where Композиции LIKE '%м%' and Композиции LIKE '%х%' and Композиции LIKE '%а%' and Композиции LIKE '%л%' and Композиции LIKE '%к%' and Композиции LIKE '%р%' and Композиции LIKE '%г%';
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
|
| 22.09.2015, 14:46 [ТС] | |
|
Так не ищет(
0
|
|
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 14:49 | |
|
на что ругается? или просто ничего не выдает?
Потому что я сейчас этот запрос переделал под один из своих проектов - сработал щас скрин даже выложу, чтоб сомнений не было
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
|
| 22.09.2015, 14:53 [ТС] | |
|
Нет он выдает, но не то что ищем. Ищем михаила круга, а предлагает он :
dj грув - юность в сапогах (feat конец фильма) dj грув feat. людмила гурченко and александр михай... александрович михаил - ночное танго александрович михаил - солнечный город .... Ну и очень много исполнителей... может где то из них круг то и есть ) но хотелось бы что бы он сверху выводился)
0
|
|
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 14:56 | |
|
Вот результат
0
|
|
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 15:10 | |
|
Щас ради интереса забью пару тройку этих записей и посмотрю что мне выдаст
Добавлено через 12 минут Поменяй условие на первые символы слов то есть на м и на к сделай 'м%' и 'к%'
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
||
| 22.09.2015, 15:26 [ТС] | ||
|
Да попробовал) всё равно первым выдает не круга)
Добавлено через 7 минут Если полностью делать запрос правильно SELECT name FROM music where (name LIKE '%к%') AND (name LIKE '%р%') AND (name LIKE '%у%') AND (name LIKE '%г%') AND (name LIKE '%м%') AND (name LIKE '%и%') AND (name LIKE '%х%') AND (name LIKE '%а%') AND (name LIKE '%и%') AND (name LIKE '%л%') То выводит. Ка только делаю хоть одну ошибку выводит уже других исполнителей.
Так к сожалению вообще не выводит, пустой результат.
0
|
||
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 15:30 | |
|
можно еще такую конструкцию попробовать
WHERE (Name LIKE 'м%х%а%л') AND (Name LIKE 'к%р%г') а вот с вариантом "мммиихаил" я бы посоветовал отслеживать и исключать дубликаты символов на уровне слова.
0
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
|||
| 22.09.2015, 15:36 [ТС] | |||
0
|
|||
|
17 / 17 / 0
Регистрация: 12.03.2013
Сообщений: 83
|
|
| 22.09.2015, 15:43 | |
|
разумеется исключать программно их
Добавлено через 6 минут Как вариант можно ещё похимичить с предикатом SIMILAR, но не забывай и про LIKE. На сколько я знаю эти вещи должны решить твою проблему, ну как минимум частично. Но что-то мне подсказывает, что без хорошей логики в программной части тоже не обойтись. Пока у меня мысли кончились. Если вдруг нахлынет озарение - отпишусь.
1
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
|
| 22.09.2015, 15:59 [ТС] | |
|
Спасибо) будут думать и пробовать.
0
|
|
|
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
|
|||||||
| 26.09.2015, 20:41 | |||||||
|
Именно по этому поиску будет выбирать следующим образом:
в начале и конце ставим %, между всеми символами тоже; пробел считаем тоже символом, который нужно обрамлять в % как символ
0
|
|||||||
|
4 / 4 / 3
Регистрация: 25.09.2015
Сообщений: 19
|
||||||
| 27.09.2015, 16:23 | ||||||
|
а для чего пробел обрамлять? пробел всё сломает
входную строку разбили по пробелам на слова (пробелы отбросили) каждое слово начинается и заканчивается процентом, между каждым символом процент каждое слово заворачивается в свой отдельный LIKE минимальную длину строки, после которой стартует поиск задаём в программно Результирующий запрос должен выглядеть:
"михаил круг" "круг михаил" "михаилкруг" "кругмихаил" "кгмхл"
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
||
| 27.09.2015, 23:21 [ТС] | ||
0
|
||
|
4 / 4 / 3
Регистрация: 25.09.2015
Сообщений: 19
|
||||||||||||||||
| 28.09.2015, 00:40 | ||||||||||||||||
|
ну есть пара идей..)
такого рода Like, который мы описали, позволил искать исполнителей, если пользователь - школьник с плохой грамматикой..) и этот запрос хорош. а теперь представь, что человек реально правильно указал исполнителя нету острой необходимости включать такого рода параноидальный поиск. идея в том чтобы объединить два запроса. запрос типа
*запросы могут иметь синтаксические ошибки, мне не на чем проверить
1
|
||||||||||||||||
|
80 / 58 / 11
Регистрация: 16.12.2013
Сообщений: 175
|
|
| 28.09.2015, 12:27 | |
|
Если вы хотите получить качественное решение, то вам придётся создать собственную меру сходства строк (её иногда иначе называют расстоянием) и вычислять её в коде. За основу можно взять, например, расстояние Левенштейна. При этом придётся вычислять это расстояние между образцом и каждой записью в БД. Прокатит, если записей сравнительно немного, например, 100 тыс. А код выполняется на клиентской стороне.
Причём, в чистом виде расстояние Левенштейна вам вряд ли подойдёт, так как между строками "М. Круг" и "Михаил Круг" вы получите значительную величину расстояния, в то время как ясно, что это одно и то же. Эта задача часто встречается при сравнении имён, названий предприятий, адресов и т.п. Однако, удовлетворительного общего решения нет. Нужно разрабатывать свой алгоритм вычисления меры сходства, в зависимости от природы данных, возможных способов перестановки слов, возможных сокращений и т.д. Существует так же подход, основанный на записи в БД синонимов - всех возможных сокращений и перестановок. База синонимов получается здоровенной. В несколько раз больше, чем исходная. Но поиск можно выполнить быстрее, чем вычисление расстояния полным перебором.
1
|
|
|
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 34
|
||||
| 28.09.2015, 14:17 [ТС] | ||||
0
|
||||
|
4 / 4 / 3
Регистрация: 25.09.2015
Сообщений: 19
|
||||||||||||
| 01.10.2015, 11:19 | ||||||||||||
|
Maxnival, извините, был занят. сейчас тоже не смогу развёрнуто ответить.
посмотрите команду UNION ALL. эта конструкция объединяет наборы результатов от двух запросов. Это вот про этот фрагмент: Т.е. можно написать
Я думаю вы справитесь. Если будет совсем тоскливо - пишите Добавлено через 32 минуты А сорян. запросы-то неправильно написаны)
0
|
||||||||||||
| 01.10.2015, 11:19 | |
|
Помогаю со студенческими работами здесь
19
Умный поиск по нескольким таблицам Access
Ошибка при индексации в "Умный поиск" Умный указатель Умный фильтр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
|
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
На примере нетипового документа разработанного в конфигурации КА2.
В качестве источника данных указан регистр накопления, в который записываются данные о. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|