2012-06-27 2 views
0

내 목표는 다음과 같습니다. 사용자는 숙련도 + 숙련도 튜플 목록을 가지고 있습니다.Solr Lucene - 문서의 색인을 생성하여 문서의 올바른 점수를 얻는 방법을 모르겠다.

우리는 약간의 기술/경험의 기준에 따라 사용자를 찾으려면 :

  • 자바, 초보자
  • PHP, 전문가

    MySQL은,

    고급

* 기술은 매우 필요하며 다른 모든 기술은 좋은 것입니다. 만족하거나 경험을 기준으로 한 사용자는 가장 높은 순위에 올 것입니다. 그러나 그것은 또한 좋게 저하되어야합니다. 어떤 사용자도 자바와 PHP 경험이 둘 다 없지만 가장 많이 요구되는 기술 중 하나가 있다면 최상위 순위에 올라야합니다. 선택적 기술 중 하나만있는 사용자가 맨 아래에 나타날 수 있습니다.

내가 가지고 있던 생각이 분야에서 사용자의 능력이 같은 인덱스입니다 :

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) 

더 좋은 방법이 있습니까?

답변

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

당신은 일이 규범을 활성화해야합니다.

+0

감사합니다. 나는 solr에서 부스트가 필드 당 값일 뿐이지 필드 값이 아니라는 것을 읽었습니다. 그래서 여기서 "스킬"은 필드이고 "mysql"은 값입니다. 또는 이것이 사실이 아니거나 오래된 정보입니까? – nogridbag

+0

잘 작동하는 것 같습니다. 고마워요. – nogridbag

관련 문제