2014-01-07 2 views
0

문서를 solrj로 색인하려고했습니다. iam은 Solr4.5를 사용하고 색인을 생성 할 거대한 파일이 있습니다. 성능 병목 현상을 피하기 위해 각 파일을 인덱싱하는 방법은 무엇입니까?Solr에 엄청난 수의 파일 추가하기

+0

얼마나 걸 립니 까? 이러한 파일은 한 번만 색인화하면됩니다. –

+0

@Bartlomiej Lewandowski : 1 시간 동안 35,000 개의 레코드를 인덱싱합니다. 그래서 총 70 만 건의 기록은 내가 쉬어야 만합니다. . 그래, 나는이 파일들을 한번 색인화해야만한다. 그러나 iam은 각 파일에 대한 solr 업데이트 요청을 호출한다. – user3161879

답변

0

우선은 서버 측 로그와 커밋에 대한 메시지를 찾을 수 있습니다. 각 파일을 구문 분석 한 후 하드 커밋을 수행하는 것이 가능합니다. 그건 비싸. 부드러운 커밋이나 commitWithin 매개 변수를 살펴보면 파일이 약간 나중에 표시되도록 할 수 있습니다.

두 번째로 Solr에게 파일을 가져오고 Tika 추출을 실행하라는 요청을 보내는 것 같습니다. 그래서, 매번 Solr 내부의 Tika가 다시 시작됩니다. 다른 대답이 제시하는 것처럼 배치 할 수는 없습니다.

그러나 클라이언트에서 로컬로 Tika를 실행하고 한 번 초기화하고 계속 유지할 수 있습니다. 그러면 SolrInputDocument를 구성하는 방법에 더 많은 융통성이 생기며 배치 할 수 있습니다.

+0

어떻게 티크 추출물을 외부에서 실행합니까? Solrj가 내부적으로 처리한다고 생각했습니다. – user3161879

+0

코드를 올바르게 이해하면 추출기 처리기로이 요청을 보냅니다. 즉, Solr * 서버 *가 Tika를 실행 중임을 의미합니다. 대신 Java 프로세스 내에서 Tika를 인스턴스화하고 직접 실행할 수 있습니다. 솔라가 구현 한 필드 매핑 기능 중 일부는 느슨하게 될 것이지만 아직 사용하지는 않을 것으로 생각됩니다. –

+0

예, 귀하의 제안을 시도하고 확인하십시오. 하지만 한 번에 하나씩 여러 문서를 색인하려고 할 때, 성공적으로 100,000 개의 레코드에 대한 색인을 생성하고 파일의 나머지 부분은 http : // servername/solr/Not ok 상태 : 500, message : 인터넷 서버 오류. 그 이유는 무엇일까요? – user3161879

0

solr을 사용하면 각 문서의 업데이트 속도가 느립니다.

모든 문서를 추가 한 다음 업데이트로 커밋하는 것이 훨씬 좋습니다. 는 SOLR 위키에서 촬영 : 확인

Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); 
docs.add(doc1); 
docs.add(doc2); 

UpdateRequest req = new UpdateRequest(); 
req.setAction(UpdateRequest.ACTION.COMMIT, false, false); 
req.add(docs); 
UpdateResponse rsp = req.process(server); 
+0

Iam은 각 파일을 한 줄씩 다른 파일을 파싱하는 것으로부터 인덱싱되도록 받고 있습니다. 그래서 나는 그 어떤 문서 모음도 갖고 있지 않습니다. 한 번에 하나의 파일이 있습니다. 그래서 루프 할 때마다이 컬렉션에 파일을 추가해야합니까? 해당 컬렉션에 대한이 업데이트 요청을 호출합니까? – user3161879

+0

@ user3161879 예, 컬렉션에 추가하고 완료하면 컬렉션으로 업데이트 요청을하십시오. –

+0

코드를 변경하고 컬렉션 문서를 server solr에 전달했습니다. 그러나 내부의 모든 문서에는 ID가 명시 적으로 설정되어 있습니다. 하지만 문서가 필수 uniqueKey 필드가 누락되어 있으므로 solr이 예외를 던지고 있습니다. id. 어떤 여분의 일을해야하는지. – user3161879

관련 문제