0

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%">&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 のどのクラスも解決されない理由がわかりません。そこで、上記のコードを修正するのを手伝ってくれる人がいるかどうか尋ねています。ありがとうございました。

4

1 に答える 1

2

経験則: abc.xyz.* をインポートすると、パッケージ abc.xyz 内のすべてのクラスのみがインポートされますが、パッケージ abc.xyz.ijk 内のクラスはインポートされません。

例: 「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

1つか2つのクラスを欠席したかもしれません。「経験則」に従って、欠落しているクラスを完全な長さのパッケージ名でインポートします。

ところで、JSP でスクリプトレットを使用しないでください。つまり、JSP で Java コードを直接使用しないでください。それは悪いアプローチです。

それをよりよく理解するために、他のリソースを見つけることができます。

于 2013-03-30T18:01:04.313 に答える