2017-12-28 17 views
1

나는 다음 부울 쿼리가 있습니다내가 통과 한 결과의 우선 순위는 어떻게 결정합니까?

POST _search 
{ 
    "query": { 
    "bool" : { 
     "must" : { 
     "term" : { "title" : "technology" } 
     }, 
     "should" : [ 
     { "term" : { "text" : "companies that produce hardware" } } 
     ] 
    } 
    } 
} 

이가 (순서대로) 다음과 같은 문서 ID 년대를 반환한다고 가정이 쿼리 내가 별도의 데이터베이스를 쿼리하고 다음과 같은 결과를 얻을 발생하기 전에

1. netflix 
2. google 
3. microsoft 
4. dell 
5. intel 

을 (순서대로) :

1. intel 
2. amazon 
3. dell 

다음 결과를 얻으려면 elasticsearch보다 데이터베이스의 결과에 우선 순위를 지정하고 싶습니다.

1. intel 
2. dell 
3. netflix 
4. google 
5. microsoft 

(얇은 공기에서 탄성 검색 문서를 만들려고하지 않으므로 아마존이 표시되지 않습니다.)

답변

1

script based sorting을 사용하면 사용자 지정 스크립트를 기반으로 데이터를 정렬 할 수 있습니다.

각 결과에 우선 순위 값을 할당하는 스크립트를 사용하십시오. 나는 그것이 가능하더라도 낙심하는 '_id'필드에 정렬 이후 company 필드를 사용

{ 
    "query": { 
    "bool" : { 
     "must" : { 
     "term" : { "title" : "technology" } 
     }, 
     "should" : [ 
     { "term" : { "text" : "companies that produce hardware" } } 
     ] 
    } 
    }, 
    "sort": { 
    "_script": { 
     "type": "number", 
     "order": "asc", 
     "script": { 
     "lang": "painless", 
     "source": "if (doc['company'].value.equals('intel')) return 0; 
        else if (doc['company'].value.equals('amazon')) return 1;       
        else if (doc['company'].value.equals('dell')) return 2;       
        else return 3; 
     } 
    } 
    } 
} 

: 뭔가처럼 될 수 없습니다. this link을 확인하십시오.

자세한 내용은 Sorting, ScriptingPainless을 확인하십시오.

희망이 있습니다.

+0

스위치 란 무엇입니까? "회사"란 무엇입니까? 대신에 "id"를 사용할 수 있습니까? 아니면 catch가 있습니까? –

+0

"else return 3"은 나머지 문서를 그대로 둡니다. 예를 들어 나머지 문서의 정렬을 엉망으로 만들지는 않습니까? –

+0

@MarissaLevy 신경 쓰지 마라, 나는 대답에서 'switch statement'부분을 삭제했다. 이 스크립트는 문서 내용을 변경하지 않으며이 특정 쿼리의 결과 정렬에만 영향을 미칩니다. ES 분류 문서에 대한 링크를 추가했습니다. "else return 3"은 문서가 'if 문'에 들어 맞지 않을 경우 우선 순위 값이 가장 높고 마지막에 배치됩니다. '_id'입력란에 대한 정보를 추가했습니다. :) – YoavBZ