これが私の目標です。ユーザーはスキルと習熟度のタプルのリストを持っています。
いくつかのスキル/経験基準に基づいてユーザーを見つけたいと考えています。
Java、初心者
PHP、エキスパート
mysql、高度
* スキルが非常に望まれ、他のすべてのスキルがあればよい場合。(経験に基づいて)以上のユーザーが最高にランク付けされます。しかし、それもうまく劣化するはずです。Java と php の両方の経験を持っているユーザーがいないが、非常に望ましいスキルの 1 つを持っている場合は、上位にランク付けする必要があります。オプション スキルを 1 つしか持っていないユーザーが下部に表示される場合があります。
私が持っていたアイデアは、次のようなフィールドでユーザーのスキルをインデックス化することです:
skill_novice: java
skill_novice: php
skill_advanced: php
skill_expert: php
skill_novice: mysql
skill_advanced: mysql
...最低限、論理クエリを実行して、非常に望ましいスキルを満たす人を見つけることができます。
(skill_novice:java AND skill_expert:php)
しかし、これは適切に劣化せず (一致が見つからない場合)、オプションのスキルも見つけられません。おそらく代わりに、次のようなことができます。
skill_novice:java AND
(skill_novice:php^0.1 OR skill_advanced:php^0.2 OR skill_expert:php^0.3)
これを達成するためのより良い方法はありますか?