Правильный поиск по базе - каков он?

123
[umka]
На сайте с 25.05.2008
Offline
456
#11
humbert:
Ищет, только если эта часть слова с начала слова идет.
Это плохо.

Так а как вы предполагаете использование индекса, если вы не указываете явно начало слова?

И вообще, в каких случаях требуется такой поиск?

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

"сделать ьталедс в в базе езаб дополнительную юуньлетинлопод колонку укнолок в в которую юуроток записывать ьтавысипаз весь ьсев текст тскет для ялд поиска аксиоп"

Поиск делать по этой самой колонке, а в строке поиска делать замену слов вида "*слово" на "оволс*".

При этом и индексы будут использоваться и релевантность сохранится ...

Но в результате размер базы увеличится в 3 раза, а скорость поиска упадёт.

Лог в помощь!
N
На сайте с 06.05.2007
Offline
419
#12
Алексей Барыкин:
Не ищет.

in boolean mode - ищет

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html


apple*'

Find rows that contain words such as “apple”, “apples”, “applesauce”, or “applet”.
Кнопка вызова админа ()
humbert
На сайте с 16.03.2006
Offline
540
#13

Таблица объектов:

id_obj, name_obj, text_obj

Таблица слов - все слова, что есть в объектах, а точнее в полях name_obj и text_obj, этакий словарик

id_word, text_word

Поле text_word индексируем

Таблица соответствий - где прописываем связи между словами и объектами

id_word, id_obj

Далее ищем по части слова в таблице слов, через like, индексы не работают, но все равно ищется быстрее, чем в таблице объектов по полям name_obj и text_obj, т.к. слова в таблице слов не повторяются.

Ну и выбрав id_word ищем конкретные объекты

Как-то так думал делать

humbert добавил 22.09.2011 в 18:28

netwind, а как искать по *pple*?

Парсинг прайс-листов, наполнение интернет-магазина товаром. (https://humbert.ru) Любая CMS (Битрикс, OpenCart, Prestashop и даже Woo Commerce )
N
На сайте с 06.05.2007
Offline
419
#14
humbert:
netwind, а как искать по *pple*?

да, действительно не ищет

[umka]
На сайте с 25.05.2008
Offline
456
#15
humbert:

humbert добавил 22.09.2011 в 18:28
netwind, а как искать по *pple*?

По части слова без начала и без конца ищите обычной регуляркой.

humbert
На сайте с 16.03.2006
Offline
540
#16

Ищу так name_pole like '%часть слова%'

Это правильно?

P.s. если несколько слов (фраза), то так name_pole like '%часть слова1%' or name_pole like '%часть слова2%' or name_pole like '%часть слова3%'

N
На сайте с 06.05.2007
Offline
419
#17
humbert:
Ищу так name_pole like '%часть слова%'
Это правильно?

ты опять? в зависимости от твоих правил. правильность - понятие не применимое к разработке ПО.

palladin_jedi
На сайте с 13.07.2010
Offline
71
#18
netwind:
правильность - понятие не применимое к разработке ПО.

Полностью согласен. Зависит от поставленной задачи.

По теме - сравнение скорости LIKE и FULLTEXT

humbert:
P.s. если несколько слов (фраза), то так name_pole like '%часть слова1%' or name_pole like '%часть слова2%' or name_pole like '%часть слова3%'

Так все строки таблицы дёргаются 3 раза. И да, LIKE не использует индексы.

Я, конечно, могу ошибаться, но я бы делал так:

1. Пишем регулярку для разбора слова или фразы.

2. Прогоняем текст через неё, чтобы на выходе получить строку со значениямим через запятую.

3. По базе ищем через WHERE MATCH([поля таблицы]) AGAINST([значения, полученые на выходе из обработки регулярки]) используя индекс FULLTEXT.

Сугубо ночное SQL-ИМХО. :)

Сайт о web-разработке и прочем (http://seazo.net)||Продвижение статьями под Google (http://short.seazo.net/ght4zf) Бесплатные консультации рефералам Sape (http://www.sape.ru/r.SWfwWOblBo.php) PHP и JS скрипты на заказ, создание сайтов с нуля и на CMS.
TF-Studio
На сайте с 17.08.2010
Offline
334
#19

sphinx очень хорошо и главное быстро все ищет!

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
humbert
На сайте с 16.03.2006
Offline
540
#20

palladin_jedi, а можно пример такого запроса?

Есть набор слов в поиске "охо рава ест" - это обрывки слов, не с самого начала.

Как искать по всем встречающимся этим словам, не используя три like?

А то я что-то не придумал пока ничего.

humbert добавил 23.09.2011 в 07:59

netwind:
ты опять? в зависимости от твоих правил. правильность - понятие не применимое к разработке ПО.

Если я буду искать нужные записи так: "Select *From table" - выберу все строки из БД и в цикле буду просматривать строки и искать нужные. Это правильно? :)

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий