0

これが私の目標です。ユーザーはスキルと習熟度のタプルのリストを持っています。

いくつかのスキル/経験基準に基づいてユーザーを見つけたいと考えています。

  • 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)

これを達成するためのより良い方法はありますか?

4

1 に答える 1

0

インデックス時に異なる値でフィールドをブーストできると思います。

  // mysql expert
  Field mysqlf = new Field("skill", "mysql", 
                                    Field.Store.YES, 
                                    Field.Index.ANALYZED); 
  mysqlf.setBoost(10.0F); 
  // mysql begginer
  mysqlf = new Field("skill", "mysql", 
                                    Field.Store.YES, 
                                    Field.Index.ANALYZED); 
  mysqlf.setBoost(1.0F); 

これを機能させるには、規範を有効にする必要があります。

于 2012-06-27T13:41:55.940 に答える