2014-01-08 1 views
3

Solr 4를 사용하면 인덱스 내의 기존 문서에 대한 원자 적 (부분) 업데이트를 수행 할 수 있습니다. 나는. 문서 ID에서 일치 시켜서 하나의 필드 내용 만 바꿀 수 있습니다. 또는 다중 값 필드에 항목을 추가 할 수 있습니다. http://wiki.apache.org/solr/Atomic_UpdatesSolr DIH는 원자 적 업데이트를 할 수 있습니까?

DataImportHandler (DIH)에서 원자 적 업데이트를 수행 할 수 있습니까?

답변

7

답변은 시행 착오를 통해 발견 한 ScriptTransformer에서 "예"입니다.

Solr 설명서는 "set", "add"또는 "inc"가있는 필드 노드에 업데이트 속성을 추가하는 방법을 보여줍니다. 필요한 업데이트 특성을 가진 테스트 XML 파일을 만들면 일반 업데이트 처리기로 전달할 때 제대로 작동합니다. 그러나 DIH로 넘어갈 때 (심지어 변환없이) 업데이트 속성은 완전히 무시됩니다.

다음은 업데이트 속성을 다시 도입하고 원자 적 업데이트를 작동시키는 데 사용 된 스크립트 변환기의 단순화 된 버전입니다. Java HashMap의 사용에 주목하십시오.

var atomicTransformer = function (row) { 
    var authorMap = new java.util.HashMap(); 
    var author = String(row.get('author')); 
    authorMap.put('add', author); 
    row.put('author', authorMap); 
}; 

이 다음 JSON 다이 하이드로에서 디버그 모드를 생성합니다

{ 
    "id": [ 
     123 
    ], 
    "author": [ 
     { 
      "add": "Smith, J" 
     } 
    ] 
} 

다중 값 필드는 아무 문제 없습니다 : 대신 문자열의 HashMap에 ArrayList를 전달합니다.

var atomicTransformer = function (row) { 
    var fruits = new java.util.ArrayList(); 
    fruits.add("banana"); 
    fruits.add("apple"); 
    fruits.add("pear"); 
    var fruitMap = new java.util.HashMap(); 
    fruitMap.put('add', fruits); 
    row.put('fruit', fruitMap); 
} 
관련 문제