こんにちは: キーワードでタグ付けされた商品を「加重検索」したいと考えています。(つまり、全文検索ではなく、n 対 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 つの関連キーワードを「含む」すべての製品のスコアを取得することです。('Dog','Elephant','Maus') を検索すると、それが欲しい
イヌのスコアは 1.003、ゾウのスコアは 1.002、マウスのスコアは 1.001 です。
したがって、最も重要でない検索用語は 1.001 から始まり、それ以外はすべて 0.001++ です。そうすれば、スコアの下限 3.0 は "AND" クエリ (3 つのキーワードすべてが見つかる必要があります) に等しくなり、スコアの下限 1.0 は "OR" に等しくなります。多かれ少なかれ一致する何かの間にあるもの。特に、このスコアに従って並べ替えることにより、最も関連性の高い検索結果が最初になります (下限に関係なく)...
私は何かをしなければならないと思います
IF( keyword1 == 'dog', 1.001, 0) + IF...
おそらくSUM()内で、おそらくクロステーブル上のJOINの最後にGROUP BYを使用していますか?しかし、私はこれに取り組む方法がまったくわかりません。
実行可能なことは、事前にキーワードからキーワード ID を取得することです。それは安価なクエリです。したがって、キーワード テーブルは無視されたままにすることができ、それはクロス テーブルとプロダクト テーブルの他方に関するものです...
かなり長い PHP ステートメントを自動的に準備するための PHP を手元に持っていますが、さらに複数の SQL ステートメントを作成することは避けたいと考えています。特に、ページング モードの結果のクエリ結果を (ほとんどの場合、「LIMIT 0, 20」に) 制限するため、スクリプトを介して結果の間に非常に多くの数をループするのは良くありません...
DANKESCHÖN、これについて私を助けることができれば:-)