Excluindo o índice do Solr usando o Solrj como cliente
Pergunta
Estou usando o Solrj como cliente para indexar documentos no servidor Solr.
Estou tendo problemas ao excluir os índices por 'ID' do servidor Solr. Estou usando o seguinte código para excluir os índices:
server.deleteById("id:20");
server.commit(true,true);
Depois disso, quando procuro novamente os documentos, o resultado da pesquisa também contém o documento acima. Não sei o que está errado com este código. Por favor me ajude com o problema.
Obrigado!
Solução
Quando você chama DeletebyId, basta usar o ID, sem sintaxe de consulta:
server.deleteById("20");
server.commit();
Outras dicas
Depois de excluir o documento, comprometa o servidor e adicione as seguintes linhas. Após a linha de comprometimento do servidor.
UpdateRequest req = new UpdateRequest();
req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
req.add( docs );
UpdateResponse rsp = req.process( server );
Use o método DeletebyQuery () Para excluir os documentos que correspondem à consulta:
server.deleteByQuery("id:20");
server.commit();
Portanto, o DeletebyId funcionará apenas se você estiver formando sua chave usando apenas um atributo. Então, eu tinha o caso em que o ID era uma combinação de vários atributos como o Funcionário+Deptid. Mas, minha mesa tinha Funcionário e Departamento como colunas separadas, bem como com índices criados nela. Então, quando eu queria excluir um registro, tinha apenas o funcionário e não o Deptid. Eu usei o comando curl para excluir onde você pode especificar a coluna e seu valor e ele excluirá todo o registro.
Por exemplo, curl http: // localhost: 8983/solr/atualização --dados ':'-H' tipo conteúdo: text/xml; charset = utf-8 '