2014-11-10 1 views
0

나는 이것을 수행 할 방법을 찾고있다. 나는 모든 전문가를 사용자 매핑 내부에 보여줄 필요가있다. 전문가는 현장 역할이 3 인 문서입니다. 그러나 전문가를 보여 주면서, 나는 먼저 자신의 소셜 미디어 (social_medias는 사용자 매핑의 배열 필드)에 "Linkedin"이라는 전문가를 표시하고 이후에는 "Army"가없는 전문가를 표시해야합니다. 소셜 미디어에 "링크드 인"을 가진 문서가 먼저 와야한다, 그것을 가져 오는 동안특정 조건과 일치하는 문서에 정렬 우선 순위 추가

[ 
    { 
    role: 3, 
    name: "David", 
    social_medias: ["Twitter", "Facebook"] 
    }, 
    { 
    role: 3, 
    name: "James", 
    social_medias: ["Facebook", "Linkedin"] 
    }, 
    { 
    role: 3, 
    name: "Michael", 
    social_medias: ["Linkedin", "Facebook"] 
    }, 
    { 
    role: 3, 
    name: "Peter", 
    social_medias: ["Facebook"] 
    }, 
    { 
    role: 3, 
    name: "John", 
    social_medias: ["Facebook", "Twitter"] 
    }, 
    { 
    role: 2, 
    name: "Babu", 
    social_medias: ["Linkedin", "Facebook"] 
    } 
] 

그래서, 내가 역할 3 문서를 얻기 위해 원하는 : 예를 들면 :, 나는 5 문서를 가지고있다. 따라서, 쿼리 후 출력 순서로해야한다 : 지금 function_score으로 노력하고

[ 
    { 
    role: 3, 
    name: "James", 
    social_medias: ["Facebook", "Linkedin"] 
    }, 
    { 
    role: 3, 
    name: "Michael", 
    social_medias: ["Linkedin", "Facebook"] 
    }, 
    { 
    role: 3, 
    name: "David", 
    social_medias: ["Twitter", "Facebook"] 
    }, 
    { 
    role: 3, 
    name: "Peter", 
    social_medias: ["Facebook"] 
    }, 
    { 
    role: 3, 
    name: "John", 
    social_medias: ["Facebook", "Twitter"] 
    } 
] 

. function_score에서 우선 순위가 더 높은 열을 지정할 수 있지만 우선 순위 기반 우선 순위를 지정하는 방법을 파악할 수 없습니다.

답변

1

왜 사용자 정의 주문 또는 사용자 정의 득점없이 (점수에 의한 종류의) ES에서 당신을 위해 일을 할 기본 정렬을하지 :

GET /my_index/media/_search 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      {"match": {"social_medias": "Linkedin"}}, 
      {"match_all": {}}, 
      {"query_string": { 
       "default_field": "social_medias", 
       "query": "NOT Army" 
      }} 
      ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "role": "3" 
     } 
     } 
    } 
    } 
} 

"role":"3"에 대한 필터 위의 다음 should 절에 쿼리 그것을 기본적으로 : 문서 social_medias 값이 Linkedin 일치하는 경우 다음이 일치하는 기준으로 점수를 제공하십시오. Linkedin과 일치하지 않는 다른 모든 문서도 포함하려면 match_allshould을 추가하십시오. 이제 match_all과 일치하는 모든 항목이 점수를받습니다. 해당 문서가 Linkedin과 일치하면 점수가 추가로 높아져 점수가 높아지고 결과 목록의 첫 번째 점수가됩니다.