Estou começando a utilizar o Lucene, e pretendo utilizar este engine de busca em uma aplicação web que estou desenvolvendo. Segui os passos da documentação do Lucene para a criação de uma aplicação web e tudo funcionou corretamente. No entanto, quando realizo uma busca qualquer que retorne resultados, os hyperlinks que são montados sempre apontam para null.
Como fazer para que estes hyperlinks apontem para o endereço correto? Mais especificamente, onde e como devo setar o atributo URL para que o hyperlink montado aponte para a página correta?
Agradeço pela ajuda.
Abraços a todos![/b]
Olá,
isto está parecendo erro na sua aplicação e não do Lucene. Vc já depurou este código para ver o que está retornando da busca Lucene?
SE naõ resolver cola o código aqui para podermos ajudar.
Franklin, obrigado pela resposta. Não sei se realmente é erro da aplicação, porque eu ainda estou seguindo o exemplo que vem junto com a distribuição do Lucene, não mudei nada em relação ao código fornecido no exemplo.
Acho que, na verdade, está faltando configurar algo. A parte do código que deveria montar a URL é a seguinte:
<%
Document doc = hits.doc(i); //get the next document
String doctitle = doc.get(“title”); //get its title
String url = doc.get(“url”); //get its url field
if ((doctitle == null) || doctitle.equals("")) //use the url if it has no title
doctitle = url;
//then output!
%>
Este código está em results.jsp, que vem junto com o exemplo, eu não o alterei. Acho que em algum momento devo especificar na estrutura do documento ou algo assim o valor da url que será recuperado na linha de código String url = doc.get(“url”); citada acima.
Se você puder me ajudar, agradeço.
Isto não é um erro do Lucene em si, e sim do exemplo que vc está usandio.
Você tem que ver no código que constroi o Document que será adicionado ao indíce.
Tem que ser algo assim:
public Document getDocument(MyObject obj) {
org.apache.lucene.document.Document d = new org.apache.lucene.document.Document();
d.add(Field.Keyword("id", obj.getId().toString()));
[b]d.add(Field.Keyword("url", obj.getUrl()));[b]
StringBuffer sb = new StringBuffer();
sb.append(obj.getTitle()+ " | ");
sb.append(obj.getShortText()+ " | ");
sb.append(obj.getAdditionalText()+ " | ");
d.add(Field.Text("content", sb.toString()));
return d;
}
ps.os métodos do MyObject que eu coloquei são meramente ilustrativos.
Obrigado pelas dicas, Franklin. Vou tentar modificar o exemplo.