DataImportHandler를 사용하여 SQL 데이터베이스와 동기화 된 색인을 유지하려고합니다 (바닐라 일을하는 것). 데이터베이스가 꽤 커질 것이므로이 메서드 http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport을 사용하여 점진적 가져 오기를 사용하고 있으므로 호출의 형식은 http://localhost:8983/solr/Items/dataimport?command=full-import&clean=false
입니다. 이것은 항목을 추가 할 때 완벽하게 작동합니다. 사용자 정의 전체 가져 오기로 Solr 삭제
SELECT Id FROM DeletedItems WHERE WasDeletedOn > '${dataimporter.last_index_time}'
의 라인을 따라 쿼리를 기반으로 내 인덱스에서 관련 항목을 삭제할 수 있기를 기대했다 그러나 나는이 작업을 수행하는 방법을 알아낼 수 없습니다. 위의 링크는 암시 적으로이를 암시합니다.
이 경우에는 deletedPkQuery를 사용하려는 경우에도 delta-import 명령을 계속 실행해야하는 경우에 대비해야합니다.
위의 SQL 쿼리에 deletedPkQuery를 설정해도 작동하지 않는 것 같습니다. 그런 다음 deletedPkQuery가 델타 가져 오기에서만 작동하므로 동기화 프로세스의 일부로 내 solr 서버에 두 가지 요청을해야한다는 내용을 읽었습니까? 이 작업은 변경되는 dataimporter.last_index_time
속성에 의해 매개 변수화되어 있으므로 올바르게 표시되지 않습니다. 두 단계 모두 하나의 "원자"행동으로 수행되어야합니다. 어떤 아이디어?
감사합니다. 델타 가져 오기를 피하려고합니다. 델타 쿼리가 반환 한 각 PK (즉, n + 1)가 하나 일 때 데이터베이스에 대한 호출을 실행하는 것처럼 보입니다. Solr 설명서에서 "참고 : Solr에서 문서를 업데이트하는 다른 방법이 있습니다.이 방법은 많은 경우 효율적이며 http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport에서 설명 된 구성도 필요 없습니다." 그들이 여기서 설명하는 방법은 증분 가져 오기에 매우 적합하지만 삭제 의도가 어떻게 구성되는지 이해할 수 없습니다. –
참고로, 전체 가져 오기는 사용되지만 색인을 지우지 않고 문서를 추가/업데이트합니다. –
아, 좋은 지적입니다. 나는 그 세부 사항을 놓쳤다. 나는 당신이 두 가지 명령을 내 보내야한다고 생각합니다. 하나는 전체 가져 오기를위한 것이고, 하나는 델타 가져 오기가 나중에 삭제를 시작하는 것입니다. 전체 가져 오기를 사용하는 삭제는 일반적으로'clean = true'를 사용하여 처리됩니다. DeltaQueryViaFullImport에 설명 된 기술로 삭제 작업을 수행하려면 삭제 된 필드를 통해 수동으로 처리해야합니다. 삭제 된 필드는 이후에 deleteByQuery로 삭제하거나 삭제를 트리거하는 델타 가져 오기 쿼리를 통해 제거해야합니다. 가져 오기간에 얼마나 많은 문서를 삭제하고 있습니까? – MatsLindh