2013-03-30 3 views
0

Для поиска в индексе Lucene я поймал запрос пользователя через веб-интерфейс пользователя в JSP. В JSP я написал короткий JAVA-код для анализа запроса и вызова поискового индекса Lucene для поиска запроса. Но проблема в том, что он многократно дает ошибку компиляции, поскольку «Запрос не может быть разрешен, MultiFieldQueryParser не может быть разрешен ...». Поэтому ни один из классов Lucene не разрешается. Код выглядит следующим образом: ИмяИмпорт классов из внешних JAR-файлов в JSP

Файл: result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*,java.io.*,org.apache.lucene.*" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%! String query; %> 
<% 
    query=request.getParameter("myQuery"); 
%> 
<form name="frm" method="post" action="result.jsp"> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td width="22%">&nbsp;</td> 
<td width="78%">&nbsp;</td> 
</tr> 
<tr> 
<td>&nbsp; </td> 
<td><input type="text" name="myQuery" placeholder="Type here"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td><input type="submit" name="submit" value="Submit"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
</tr> 
</table> 
</form> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<% 
    Directory dir=new FSDirectory.open(new File(path of index directory)); 
    QueryParser parser=new MultiFieldQueryParser(Version.LUCENE_30, new String[] 
    {"title","address","city"},new BooleanClause.Occur[]{BooleanClause.Occur.MUST, 
    BooleanClause.Occur.SHOULD, BooleanCaluse.Occur.SHOULD},new StandardAnalyzer()); 
    Query query=parser.parse(query); 
    IndexSearcher searcher=new Indexsearcher(dir,true); 
    TopDocs hits=searcher.search(query,20); 
    searcher.close(); 
    dir.close(); 
%> 
<p>Query phrase is : <%=query%></p> 
</body> 
</html> 

Я не могу понять, почему любой из классов Lucene не получают решить даже после импорта Lucene выше. Поэтому я спрашиваю, может ли кто-нибудь помочь мне исправить вышеуказанный код. Спасибо.

+0

Возможный дубликат [Путаница импорта Java] (http://stackoverflow.com/questions/1335327/java-import-confusion) – femtoRgon

ответ

2

Правило большого пальца: импорт abc.xyz. * Будет ТОЛЬКО импортировать все классы в пакете abc.xyz, но НЕ классы в пакете abc.xyz.ijk.

Ex: "org.apache.lucene *" не будет импортировать "org.apache.lucene.store.Directory"

Для устранения указанных выше ошибок импорт следующих пакеты/классы.

1) "org.apache.lucene.store.Directory" или "org.apache.lucene.store. *"

2) "org.apache.lucene.queryParser.QueryParser"

3) "org.apache.lucene.queryParser.MultiFieldQueryParser"

4) "org.apache.lucene.search.BooleanClause"

5) "org.apache.lucene.analysis.standard.StandardAnalyzer"

6) org.apache.lucene.search.TopDocs

7) org.apache.lucene.search.IndexSearcher

я мог пропустить класс или два. Просто следуйте «правилу» и импортируйте отсутствующие классы с именами пакетов полной длины.

BTW, NEVER use scriptlets in a JSP, то есть прямой код Java в JSP. Это плохой подход.

Ресурсы могут быть найдены другими материалами для понимания.

+0

Я понял, что в JSP нельзя использовать скриптлет. Многие предлагали использовать JSTL вместо использования сценариев. Но в приведенном выше случае я не знаю, как использовать JSTL, чтобы избежать скрипта. Поэтому я спрашиваю, может ли кто-нибудь дать идею, чтобы справиться с этим. Спасибо. – Joy

+0

@ Джой, это был бы другой вопрос. Отправьте еще один вопрос по вашему запросу, вы наверняка получите более полные и полные ответы там, чем здесь, в комментариях. – phani

+0

Спасибо, сэр. – Joy

Смежные вопросы