EDITED : 쿼리가 OP의 명확한 질문과 일치하도록 수정되었습니다.
{
"query" : {"match_all" : {}},
"sort" : [
{"_script" : {
"script" : "[1, 10, 15].contains(doc['fubar'].value.toInteger()) ? 1 : 0",
"type" : "number",
"order" : "desc"
}},
"_score"
]
}
이런 종류의 각 문서에 fubar
정렬 종류의 따라, 10, 또는 15 일 같은지 여부를 동적으로 확인하기 위해 지정된 스크립트에 의존합니다. 이 예제에서는 여기에 결과를 1 또는 0으로 매핑하기로했지만, 다른 방법으로 시도 할 수 있습니다. 다음 샘플 데이터를 사용하여 :
{"name":"Alice", "fubar":1}
{"name":"Bob", "fubar":21}
{"name":"Carol", "fubar":33}
{"name":"David", "fubar":17}
{"name":"Evelyn", "fubar":5}
{"name":"Fred", "fubar":10}
나는 다음과 같은 결과를 얻었다 (외부 비트는 읽기 쉽도록 잘립니다) : 앨리스와 프레드가 원하는 동작 인, 먼저 반환받을 것을
"hits" : [ {
"_index" : "test",
"_type" : "test",
"_id" : "1",
"_score" : 1.0,
"_source":{"fubar": 1, "name": "Alice"},
"sort" : [ 1.0, 1.0 ]
}, {
"_index" : "test",
"_type" : "test",
"_id" : "6",
"_score" : 1.0,
"_source":{"fubar": 10, "name": "Fred"},
"sort" : [ 1.0, 1.0 ]
}, {
"_index" : "test",
"_type" : "test",
"_id" : "4",
"_score" : 1.0,
"_source":{"fubar": 17, "name": "David"},
"sort" : [ 0.0, 1.0 ]
}, {
"_index" : "test",
"_type" : "test",
"_id" : "5",
"_score" : 1.0,
"_source":{"fubar": 5, "name": "Evelyn"},
"sort" : [ 0.0, 1.0 ]
}, {
"_index" : "test",
"_type" : "test",
"_id" : "2",
"_score" : 1.0,
"_source":{"fubar": 21, "name": "Bob"},
"sort" : [ 0.0, 1.0 ]
}, {
"_index" : "test",
"_type" : "test",
"_id" : "3",
"_score" : 1.0,
"_source":{"fubar": 33, "name": "Carol"},
"sort" : [ 0.0, 1.0 ]
} ]
참고. 평범한 경우 모든 문서의 점수는 1.0이므로 보조 정렬 기준으로 _score
을 사용해도 아무런 효과가 없지만 실제 데이터 (실제 득점 포함)는이를 고려합니다.
어쩌면 이것은 바보 같은 질문 일 수 있습니다. 그러나 해당 필드를 정렬하여 수행 할 수는 없습니까? –
사실 다음에 정렬을한다는 것은 잠재적으로 수백만 개의 레코드를 반복해야하기 때문에 작동하지 않을 것입니다. 탄력성 검색을 먼저 필드별로 정렬하는 것을 의미하는 경우 어떻게하는지 알려주세요! –
슬로안, 당신이 옳았다 - 내가 질문을 언급했듯이 그것은 소팅으로 해결 될 수있다. 질문을 다시 시작했습니다. 여전히 정렬 할 수 있습니까? –