最近、私はSphinxを幅広く使用しており、UltraSphinxの死後、Patのすばらしいプラグインを使い始めました(Patに感謝します。まもなくメルボルンでコーヒーを購入します!)
あなたの元のアイデアに基づいて可能な解決策を見つけましたが、「実行時」ではなく「インデックス時」にデータを変更する必要があります。
これを試して:
Sphinx SQLクエリを変更して、「Blue」を「Blue Blue Blue Blue」に、「Recent」を「Recent 最近のRecent」に、「Fun」を「FunFun」に置き換えます。これにより、特別なキーワードの出現が拡大されます。
例:SELECT REPLACE(my_text_col、 "blue"、 "blue blue blue")asmy_text_col..。
おそらく一度にすべてを実行したいので、replace呼び出しをネストするだけです。
例:SELECT REPLACE(REPLACE(my_text_col、 "fun"、 "fun fun")、 "blue"、 "blue blue blue")as my_text_col .. ..
次に、ランキングモードをSPH_RANK_WORDCOUNTに変更します。このようにして、キーワードの頻度に最大の関連性が与えられます。
(オプション)特別なキーワードに関連するキーワードのリストがあるとします。たとえば、「淡い青」は「青」に関連し、「楽しい」は「楽しい」に関連します。実行時に、代わりにターゲット単語を探すようにクエリテキストを書き直します。これらの単語をハッシュに簡単に保存し、それをループして置換することができます。
# Add trigger words as the key,
# and the related special keyword as the value
trigger_words = {}
trigger_words['pale blue'] = 'blue'
trigger_words['pleasant'] = 'fun'
# Now loop through each query term and see if it should be replaced
new_query = ""
query.split.each do |word|
word = trigger_words[word] if trigger_words.has_key?(word)
new_query = new_query + ' ' word
end
これで、準キーワードクラスタリングもできました。スフィンクスは本当に素晴らしいテクノロジーです、お楽しみください!