|
|
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, подскажите пожалуйста как составить такой запрос. Модернизирую доску объявлений и нужно сделать вывод похожих объявлений по названию. К примеру объявление называется "Продам лада нива г.в. 2007" Нужно по этому названию вытащить другие записи, которые бы были похожи, например "В хорошем состоянии лада 2107 в москве" <- точное совпадение по слову "лада". "продаю ладу 2106" -< неточное совпадение по словам "продаю и ладу" итд. т.е. чтобы поиск вёлся как по точному вхождению слова, так и по похожим словам. Конструкция LIKE '%Продам лада нива г.в. 2007%' похоже не работает из за того что слов несколько и они с нечётким совпадением. Если что могу сделать предобработку запроса на php - т.е. например распарсить заголовок на слова и собрать их потом в запросе, но так вопрос с нечётким совпадением фраз не решается. Помогите составить запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 05:58:37 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
ali_tash, full-text search ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 09:12:41 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
первый шаг сделан - разобрали на слова, теперь можно даже индекс построить теперь нужно понять как вообще выглядит "нечеткое сравнение" - например, все буквы совпадают, кроме одной тогда можно придумывать доп. алгоритмы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 09:22:56 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
tanglirali_tash, full-text search Я так понял эта функция работает только с полями на которых стоит индекс fulltext - что замедляет работу с таблицей. И так и не понял как сделать с помощью запроса MATCH поиск по похожим словам. Можно пример запроса ? SELECT * FROM ads WHERE MATCH (title) -> AGAINST ('В хорошем состоянии лада 2107 в москве'); чтобы нашлась запись продаю ладу 2106 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 14:44:08 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
krapotkinпервый шаг сделан - разобрали на слова, теперь можно даже индекс построить теперь нужно понять как вообще выглядит "нечеткое сравнение" - например, все буквы совпадают, кроме одной тогда можно придумывать доп. алгоритмы Тоже не понял что вы имеете ввиду. Да нечёткое сравнение, когда совпадают все буквы, кроме одной-двух, подходит. Можно пример ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 14:45:59 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Столкнулся с необъяснимой проблемой там, где никак не ожидал. Запрос: Код: sql 1. 2. Выводит только @product_idcategory_idname1452Корпусные части Такие записи 'Legend (A6363)' в таблице точно есть. Для исключения ошибок текст поля скопирован прямо из таблицы. Вот этот запрос Код: sql 1. Возвращает category_idname19Legend (A6363) 19Legend (A6363) В чем может быть причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:05:59 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Такой запрос также отрабатывает без проблем Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:09:18 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
А такой запрос не возвращает ничего Код: sql 1. 2. Можно конечно предположить, что все дело в порядке сравнения в первом случае поле сравнивается с переменной Код: sql 1. а во втором переменная с полем Код: sql 1. НО! Почему тогда срабатывает выборка в первом запросе по полю 'Корпусные части'???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:15:14 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
На всякий случай. Таблицы htcc_store.store_category_description и category одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:18:13 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
ali_tashkrapotkinпервый шаг сделан - разобрали на слова, теперь можно даже индекс построить теперь нужно понять как вообще выглядит "нечеткое сравнение" - например, все буквы совпадают, кроме одной тогда можно придумывать доп. алгоритмы Тоже не понял что вы имеете ввиду. Да нечёткое сравнение, когда совпадают все буквы, кроме одной-двух, подходит. Можно пример ? (напрямую я не работал с поиском, поэтому только обшие идеи) 1. имея одно конкретно слово можно находить похожие с помошью функции SOUNDEX(), применяя ее к обоим сторонам сравнения. 2. ФулТехт индексирует оригинальные слова, т.е. потом нельзя использовать САУНДЕКС 3. Возможно сделать так -- типа самому создать фултекс с саудексом: 3.1 Разобрать все предложения на отдельные слова в отдельной таблице 3.2 добавить колонку SOUNDEX() 3.3. проиндексировать эту колонку 3.4. разобрать поиск на слова и применить САУНДЕХ к каждому отдельно 3.5. все 5 или 10 слов в предложение после САУДЕХа прогнать по поиску в большой таблице 4. Используйте внешние приблуды: sphinx, solr или еще какие-нибудь 5. еще один (может быть) полезный момент: сделать словарик частых соответсвий, ну типа "продаю" == "на продажу" == "налетай, подешевело" "ВАЗ-2101" == "копейка" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 18:32:50 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
если тебе надо найти 'Legend (A6363)' и 'Корпусные части' то разбей на Код: sql 1. а в Legend (A6363) информативным есть только A6363, поэтому если поиск идет с набора на клаве, то набор Legend просто трата времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 07:19:23 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
вадяесли тебе надо найти 'Legend (A6363)' и 'Корпусные части' то разбей на Код: sql 1. Понятно, что можно как-то выкрутиться... Почему нормально не работает? Может есть какая-то фишка в MySQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 11:08:48 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Вопрос решился перезаписью данных в поле. Похоже на то, что один из символов был в другой кодировке, например в русской. Хотя я копировал текст из поля в запрос, результата это не приносило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:28:29 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Ну так что посоветуете ? Как сделать гибкий поиск без fulltext и like ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 17:06:10 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
ali_tash, старый анекдот: -- следуюший -- доктор, мне кажется меня никто не слышит -- следуюший (это я про себя :-) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 17:57:31 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
javajdbcali_tashпропущено... Тоже не понял что вы имеете ввиду. Да нечёткое сравнение, когда совпадают все буквы, кроме одной-двух, подходит. Можно пример ? (напрямую я не работал с поиском, поэтому только обшие идеи) 1. имея одно конкретно слово можно находить похожие с помошью функции SOUNDEX(), применяя ее к обоим сторонам сравнения. 2. ФулТехт индексирует оригинальные слова, т.е. потом нельзя использовать САУНДЕКС 3. Возможно сделать так -- типа самому создать фултекс с саудексом: 3.1 Разобрать все предложения на отдельные слова в отдельной таблице 3.2 добавить колонку SOUNDEX() 3.3. проиндексировать эту колонку 3.4. разобрать поиск на слова и применить САУНДЕХ к каждому отдельно 3.5. все 5 или 10 слов в предложение после САУДЕХа прогнать по поиску в большой таблице 4. Используйте внешние приблуды: sphinx, solr или еще какие-нибудь 5. еще один (может быть) полезный момент: сделать словарик частых соответсвий, ну типа "продаю" == "на продажу" == "налетай, подешевело" "ВАЗ-2101" == "копейка" Функции SOUNDEX для русского языка в mysql не существует, да и как её использовать, ведь сравнение должно вестись по нескольким словам - "куплю ладу 2106" - исходные данные(3 слова) c "купить авто лада 2108"(поле в записе, для поиска - 4 слова). Вобщем вопрос ещё, актуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 05:07:46 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
>> Функции SOUNDEX для русского языка в mysql не существует таки плохо, смотрите приблуды , типа названых выше, может гугл имеет какие-нибудь готовые модули >> , да и как её использовать, ведь сравнение должно вестись по нескольким словам - так или иначе придется резать предложения на слова. Или сами делайте или ищите библиотеки (типа как гугл) >> "куплю ладу 2106" - исходные данные(3 слова) c "купить авто лада 2108"(поле в записе, для поиска - 4 слова). придется делать словарик соответсвий, как указано выше. Никакая библиотека не знает что 2101 == "копейка", вам придется "канонизировать" -- приводит к стандарту -- слово за словом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 15:18:56 |
|
||
|
Вытащить похожие записи по названию - like или не like ??
|
|||
|---|---|---|---|
|
#18+
Короче сделал с индексом full-text и предварительным вырезанием из строки поиска слов "куплю, продам, покупаю итд" - чтобы в результате в запросе не выводилось данных вообще не по теме. В принципе нормально работает. Но с саундексом, конечно лучше бы было, заманчивая идея, искал бы он сразу в фулл тексте.... javajdbc спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2014, 22:07:40 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1834441]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 186ms |
| total: | 300ms |

| 0 / 0 |
