要在Lucene索引中搜索,我在JSP中通过Web用户界面捕获了用户的查询。在JSP中,我编写了简短的JAVA代码来解析查询并调用Lucene索引搜索器来搜索查询。但问题是它反复出现编译错误,因为“查询无法解析,MultiFieldQueryParser无法解析......”。所以没有一个Lucene课程得到解决。代码如下:
文件名: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%"> </td>
<td width="78%"> </td>
</tr>
<tr>
<td> </td>
<td><input type="text" name="myQuery" placeholder="Type here"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Submit"></td>
</tr>
<tr>
<td> </td>
<td> </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 :(得分: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 ,即JSP中的直接Java代码。这是一个糟糕的方法。
您可以找到其他资源来更好地理解它。