Здравствуйте. Я хочу выполнить "взвешенный поиск" по продукту, который помечен ключевыми словами.
(Итак: не полнотекстовый поиск, а отношение n-to-m). Итак, вот оно:
Table 'product':
sku - the primary key
name
Table 'keywords':
kid - keyword idea
keyword_de - German language String (e.g. 'Hund','Katze','Maus')
keyword_en - English language String (e.g. 'Dog','Cat','Mouse')
Table 'product_keyword' (the cross-table)
sku \__ combined primary key
kid /
Я хочу получить оценку по всем продуктам, которые хотя бы "содержат" одно релевантное ключевое слово. Если я ищу («Собака», «Слон», «Маус»), я хочу, чтобы
Собака начисляет 1,003 балла,
Слон 1.002
Маус 1.001
Поэтому наименее важный поисковый термин начинается с 1,001, а все остальное - 0,001 ++. Таким образом, нижний предел оценки 3,0 будет равен запросу «И» (должны быть найдены все три ключевых слова), а нижний предел оценки 1,0 будет равен «ИЛИ». Что-нибудь между чем-то более или менее подходящим. В частности, сортируя по этой оценке, наиболее релевантные результаты поиска будут первыми (независимо от нижнего предела) ...
Думаю, мне придется что-то делать с
IF( keyword1 == 'dog', 1.001, 0) + IF...
может быть внутри SUM () и, возможно, с GROUP BY в конце JOIN через кросс-таблицу, а? Но я совершенно не знаю, как с этим справиться.
Что было бы возможно, так это заранее получить идентификаторы ключевых слов из ключевых слов. Это дешевый запрос. Таким образом, таблицу ключевых слов можно оставить без внимания, и это все о другой таблице кросса и продукта ...
У меня есть PHP под рукой, чтобы автоматически подготовить довольно длинную инструкцию PHP, но я хотел бы избежать дальнейших множественных операторов SQL. В частности, поскольку я ограничу результат запроса (чаще всего «LIMIT 0, 20») для результатов режима подкачки, поэтому зацикливание очень большого числа промежуточных результатов через сценарий было бы бесполезным ...
DANKESCHÖN, если вы можете помочь мне в этом: -)