2013-05-20 3 views
1

상위/하위 문서 :Elasticsearch 지수 별칭 (w/라우팅) 나는 다음과 같은 특성을 가진 인덱스를 설정하기 위해 노력하고있어

  • 인덱스 주택 데이터 많은 프로젝트. 대부분의 작업은 프로젝트마다 다르므로 project_id를 라우팅 필드로 사용하여 각 프로젝트의 별칭을 설정합니다. (관련 용어 필터로도 사용됩니다.)
  • 해당 데이터에는 상위/하위 구조가 있습니다. 간단하게하기 위해, 문서 유형을 "mama"및 "baby"라고 부르 자.

    curl -XDELETE http://localhost:9200/famtest 
    curl -XPOST http://localhost:9200/famtest -d ' 
    { "mappings" : 
        { "mama" : 
        { "properties" : 
         { "project_id" : { "type" : "string", "index" : "not_analyzed" } } 
        }, 
        "baby" : 
        { "_parent" : 
         { "type" : "mama" }, 
         "properties" : 
         { "project_id" : { "type" : "string", "index" : "not_analyzed" } } 
        } 
        } 
    }' 
    
    curl -XPOST "http://localhost:9200/_aliases" -d ' 
    { "actions": 
        [ { "add": 
        { "alias": "family1", 
         "index": "famtest", 
         "routing": "100", 
         "filter": 
         { "term": { "project_id": "100" } } 
        } 
        } ] 
    }' 
    
    curl -XPOST "http://localhost:9200/_aliases" -d ' 
    { "actions": 
        [ { "add": 
        { "alias": "family2", 
         "index": "famtest", 
         "routing": "200", 
         "filter": 
         { "term": { "project_id": "200" } } 
        } 
        } ] 
    }' 
    

    지금의 몇 가지 마마를 만들어 보자 :

    curl -XPOST localhost:9200/family1/mama/1 -d '{ "name" : "Family 1 Mom", "project_id" : "100" }' 
    curl -XPOST localhost:9200/family2/mama/2 -d '{ "name" : "Family 2 Mom", "project_id" : "200" }' 
    

    이 문서는 지금/familyX/_search 통해 사용할 수 있습니다

그래서 우리는 지수와 별칭을 만들 수 있습니다.

불행하게도
curl -XPOST localhost:9200/family1/baby/1?parent=1 -d '{ "name": "Fam 1 Baby","project_id" : "100" }' 

, ES가 좋아하지 않는다 :

{"error":"ElasticSearchIllegalArgumentException[Alias [family1] has index routing associated with it [100], and was provided with routing value [1], rejecting operation]","status":400} 

을 그래서 ... 어떤 아이디어는 어떻게 별칭 라우팅을 사용하고 여전히 부모 ID를 설정 그래서 지금 우리는 아기를 추가하려면? 이 권리를 이해한다면 그것은 문제가되어서는 안됩니다. 모든 프로젝트 작업 (이 경우 "family1")이 별칭을 통과하므로 부모 및 자식 문서가 동일한 분할 문서에 보관됩니다. 라우팅을 방해하지 않고 상위 ID를 설정하는 다른 방법이 있습니까?

감사합니다. 내가 더 구체적 일 수 있는지 알려주십시오.

답변

1

흥미로운 질문입니다! 부모 문서와 동일한 샤드에서 색인을 생성해야하기 때문에 이미 부모 ID가 경로 지정에 사용됩니다. 부모와 자녀가 같은 가족에 속할 것이므로, 가족 별칭에서 라우팅을 구성한 이후로 같은 샤드에서 어쨌든 부모님과 어린이가 같은 일을하려고하므로 잘 하시려는 것입니다.

하지만 부모 ID가 우선 적용되는 별칭에 정의 된 라우팅보다 우선 순위가 높습니다. 상위 우선 순위는 덮어 쓰지 만 가능하지 않으므로 오류가 발생합니다. 당신이 다시 인덱스 요청 라우팅을 제공하려고하는 경우 사실, 그것은 작동합니다

curl -XPOST 'localhost:9200/family1/baby/1?parent=1&routing=100' -d '{ "name": "Fam 1 Baby","project_id" : "100" }' 

은 내가 curl recreationgithub issue를 입력합니다.

+0

감사합니다. 솔루션에 대한 승인과 일반적인 확인을 위해 여기에 이상한 점이 있다는 표시로 표시합니다. 나는 GitHub에서 그것을 따라 할 것이다. – Erik

+0

후속 조치를 위해 제기 된 문제는 [# 3068] (https://github.com/elasticsearch/elasticsearch/issues/3068)입니다. – ofavre

관련 문제