동 방법을 결합에 대한 쿼리를 4 가지 별도로 sourted 그룹?

0

질문

나는 새로운 공정동 방법(지만 공정한 비트의 SQL 경험)이 현재 고민과 함께 넣고 적절한 쿼리를 함께. 저는 2boolean 분야 isPlayerisEvil 는 항목이 하나 truefalse 니다. 에 기반하는,내가 원하는 분 나의 데이터 집합으로 4 개의 그룹:

  1. isPlayer:true,isEvil:true
  2. isPlayer:true,isEvil:false
  3. isPlayer:false,isEvil:true
  4. isPlayer:false,isEvil:false

이러한 그룹 내가 원하는 무작위로 종류 내 자신,첨부해야 하나의 긴 목록할 수 있는 페이지를 매기. 하고 싶다는 내부에는 쿼리는 것처럼 보인다"올바른"방법을 이렇게 때문에,나는 그것을 마찬가지로서 SQL. 에서는 목록 그룹은 순으로 정렬,그래서 먼저 항목을의 그룹 1 임의의 순서,다음의 모든 항목은 그룹 2 임의의 순서,다음의 모든 항목은 그룹 3etc. . 그것은 필요한 임의의 정렬을 재현 가능한 주는 경우 동일한 입력하는 경우 정렬 기반 random_score 적인 것을 사용하여 종자 임의.

나를 구축할 수 있는 단일 쿼리지만,나는 어떻게 결합하 4?

으로 접근 방식 그 MultiSearch분리 최대 Query. MultiSearch 인 을 지원하지 않는 매김. 에 관한 분리를 최대 쿼리를 수 있는 나무의 숲을 없지만,나는 고군분투하는 것에 하위에서 임의로 정렬된 내에서만 자신이 추가하기 전에 그들 중 하나다.

여기에 어떻게 쓰일에 대한 쿼리지 않고 지금 Disjunction Max Query는 경우에,그것은 도움이됩니다:

{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "isPlayer": true
          }
        },
        {
          "term": {
            "isEvil": true
          }
        }
      ]
    }
  }
}
elasticsearch
2021-11-22 13:35:49
1

최고의 응답

0

이 문제에 대한 해결책을 하고 있지 않 4 의 별도의 그룹에만,대신 손님들은 그들 모두가 서로 다른 범위의 점수에 의해 정렬 점수가 있습니다. 이를 달성할 수 있습,득점하여 숙지하여 어떤 종류의 기준에 일치하는지 스크립트를 통해 점수 필드입니다. 이 필드를 작성할 수 있습자가 직접 코드를 반환하는 논리는 점수(기본 언어는"이라는 고통"하지만,나는 본 적이 예의 그루비뿐만 아니라).

로직은 매우 간단하다:

  1. 는 경우 isPlayer=true,2 점의 점수
  2. 는 경우 isEvil=true,추가 4 점의 점수
  3. 어느 쪽이든,추가의 임의의 숫자 0 과 1 사이에 종료

이렇게 하니 4 그룹 내가 원하는 뚜렷한 점수 범위:

  1. isPlayer=true,isEvil=true-->점수 범위:6-7
  2. isPlayer=false,isEvil=true-->점수 범위:4-5
  3. isPlayer=true,isEvil=false-->점수 범위:2-3
  4. isPlayer=false,isEvil=false-->점수 범위:0-1

쿼리는 다음과 같이 보일 것입니다.

  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      },
      "script": {
        "source": """
            double score = 0;
            if(doc['isPlayer']){
              score += 2;
            }
            
            if(doc['isEvil']){
              score += 4;
            }
            
            int partialSeed = 1;
            score += randomScore(partialSeed, 'id');
            return score;
        """
      }
    }
  }
}
2021-11-24 08:51:50

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................