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!

Foi útil?

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 '

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top