Я пишу настраиваемый фильтр в Solr для отправки токена в Apache Stanbol для улучшения и индексации ответа на другое поле в том же документе.Как добавить новое поле в документ в пользовательский Solr-фильтр
В моем тестовом коде ниже у меня есть ответ Stanbol и добавили его в качестве нового документа в Solr. Мое требование состоит в том, чтобы добавить stanbolResponse в качестве значения поля в тот же документ, который был проиндексирован. Я думаю, что это можно сделать, если я могу получить идентификатор документа из TokenStream в фильтре.
Может ли кто-нибудь помочь мне с примером кода или примером или ссылкой о том, как этого достичь?
public boolean incrementToken() throws IOException {
if (!input.incrementToken()) {
return false;
}
int length = charTermAttr.length();
char[] buffer = charTermAttr.buffer();
String content = new String(buffer);
Client client = Client.create();
WebResource webResource = client.resource(stanbol_endpoint + "enhancer");
ClientResponse response = webResource
.type(MediaType.TEXT_PLAIN)
.accept(new MediaType("application", "rdf+xml"))
.entity(content2,MediaType.TEXT_PLAIN)
.post(ClientResponse.class);
int status = response.getStatus();
if (status != 200 && status != 201 && status != 202) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
charTermAttr.setEmpty();
char[] newBuffer = output.toCharArray();
charTermAttr.copyBuffer(newBuffer, 0, newBuffer.length);
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", "id1", 1.0f);
doc1.addField("stanbolResponse", output);
try {
server.add(doc1);
server.commit();
} catch (SolrServerException e) {
System.out.println("error while indexing response to solr");
e.printStackTrace();
}
return true;
}
Может быть, я неправильно ваше дело, но вы не можете просто создать UpdateRequestProcessor предварительный анализ? Вы можете делать все, что хотите, в своем процессоре, а затем добавлять результат в документ и передавать его через обычную цепочку анализа. – lexk
yep Lexk, этот usecase был успешно покрыт написанием UpdateRequestProcessor. –