Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApacheLucene为全文搜索提供fsdirectory的web inf文件夹路径_Java_Jsp_Lucene_Web Inf - Fatal编程技术网

Java 如何使用ApacheLucene为全文搜索提供fsdirectory的web inf文件夹路径

Java 如何使用ApacheLucene为全文搜索提供fsdirectory的web inf文件夹路径,java,jsp,lucene,web-inf,Java,Jsp,Lucene,Web Inf,我对ApacheLucene非常陌生。在这里,我尝试开发一个示例全文搜索应用程序,它将使用给定的输入查询在html文件中搜索,如果在任何文件中找到给定的字符串,则创建索引 我的结果jsp页面如下所示: 若我点击任何超链接,那个么html文件需要在新选项卡中打开,但我得到的是空白页面 这是我的应用程序文件夹结构 这是我的代码: protected void doPost(HttpServletRequest request, HttpServletResponse response)

我对ApacheLucene非常陌生。在这里,我尝试开发一个示例全文搜索应用程序,它将使用给定的输入查询在html文件中搜索,如果在任何文件中找到给定的字符串,则创建索引

我的结果jsp页面如下所示:

若我点击任何超链接,那个么html文件需要在新选项卡中打开,但我得到的是空白页面

这是我的应用程序文件夹结构

这是我的代码:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String query=request.getParameter("squery");
        String path1= "C:/POC/indexs/";
        System.out.println(path1);
        String path2 = request.getContextPath()+"/WEB-INF/Html-Files";

        File indexDir = new File(path1);
        int hits = 100;
        FilesTextFinder createIndex=new FilesTextFinder();
        File dataDir = new File(path2);
        String suffix = "html";
        try 
        {
            boolean iscreated=isIndexCreated(indexDir, query, hits);
            if(!iscreated)
            {
                 System.out.println("no indexs found...");
                int numIndex = createIndex.index(indexDir, dataDir, suffix);
                System.out.println("Total Indexs: "+numIndex);
            }
            searchIndex(indexDir, query, hits);
            RequestDispatcher rd=request.getRequestDispatcher("/Results.jsp");
            request.setAttribute("results", values);

            request.setAttribute("query", query);
            rd.forward(request, response);

        } 
        catch (Exception e) 
        {

            e.printStackTrace();
        }
    }

    private void searchIndex(File indexDir, String queryStr, int maxHits) throws Exception 
    {       
        Directory directory = FSDirectory.open(indexDir);
        DirectoryReader dreader=DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(dreader);
        QueryParser parser = new QueryParser("contents",new SimpleAnalyzer());
        Query query = parser.parse(queryStr);
        TopDocs topDocs = searcher.search(query, maxHits);
        ScoreDoc[] hits = topDocs.scoreDocs;
        int count=hits.length;

        values=new HashMap<String, String>();
        for (int i = 0; i<count; i++) 
        {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            String cmpt_path=d.get("filename");
            int indx=cmpt_path.lastIndexOf("\\");
            String name=cmpt_path.substring(indx+1,cmpt_path.length());
            if(name.length()>40)
            {
                name=name.substring(0, 40);
            }
            System.out.println("name: "+name);
            values.put(name, cmpt_path);

        }

        System.out.println("Found " + hits.length);
    }
    private boolean isIndexCreated(File indexDir, String queryStr, int maxHits) throws Exception 
    {
        Directory directory = FSDirectory.open(indexDir);
        System.out.println("---------"+indexDir);
        DirectoryReader dreader=DirectoryReader.open(directory);//here i am getting error
        IndexSearcher searcher = new IndexSearcher(dreader);
        QueryParser parser = new QueryParser("contents",new SimpleAnalyzer());
        Query query = parser.parse(queryStr);
        TopDocs topDocs = searcher.search(query, maxHits);
        ScoreDoc[] hits = topDocs.scoreDocs;
        int count=hits.length;
        System.out.println("called..."+count);
        directory.close();
        if(count>0)
            return true;
        else
            return false;
    }

}
protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException
{
字符串查询=request.getParameter(“squery”);
字符串path1=“C:/POC/indexs/”;
System.out.println(路径1);
字符串路径2=request.getContextPath()+“/WEB-INF/Html文件”;
File indexDir=新文件(路径1);
int hits=100;
FileTextFinder createIndex=新建FileTextFinder();
文件dataDir=新文件(路径2);
字符串后缀=“html”;
尝试
{
布尔值iscreated=isIndexCreated(indexDir、query、hits);
如果(!已创建)
{
System.out.println(“未找到索引…”);
int numIndex=createIndex.index(indexDir,dataDir,后缀);
System.out.println(“总指数:“+numIndex”);
}
搜索索引(索引、查询、点击);
RequestDispatcher rd=request.getRequestDispatcher(“/Results.jsp”);
setAttribute(“结果”,值);
setAttribute(“查询”,查询);
转发(请求、响应);
} 
捕获(例外e)
{
e、 printStackTrace();
}
}
私有void searchIndex(文件indexDir、字符串queryStr、int maxits)引发异常
{       
Directory=FSDirectory.open(indexDir);
DirectoryReader dreader=DirectoryReader.open(目录);
索引搜索器searcher=新索引搜索器(恐惧者);
QueryParser parser=newqueryparser(“contents”,newsimpleanalyzer());
Query=parser.parse(queryStr);
TopDocs TopDocs=searcher.search(查询,最大点击次数);
ScoreDoc[]点击次数=topDocs.scoreDocs;
int count=hits.length;
values=newhashmap();
对于(int i=0;i40)
{
name=name.substring(0,40);
}
System.out.println(“名称:”+name);
value.put(名称、cmpt_路径);
}
System.out.println(“找到”+点击数长度);
}
私有布尔isIndexCreated(文件indexDir、字符串queryStr、int maxHits)引发异常
{
Directory=FSDirectory.open(indexDir);
System.out.println(“-----------”+indexDir);
DirectoryReader-dreader=DirectoryReader.open(directory);//这里有一个错误
索引搜索器searcher=新索引搜索器(恐惧者);
QueryParser parser=newqueryparser(“contents”,newsimpleanalyzer());
Query=parser.parse(queryStr);
TopDocs TopDocs=searcher.search(查询,最大点击次数);
ScoreDoc[]点击次数=topDocs.scoreDocs;
int count=hits.length;
System.out.println(“调用…”+计数);
close()目录;
如果(计数>0)
返回true;
其他的
返回false;
}
}
如何将包含文件夹路径的html文件(即WEB-INF/html文件)传递到FSDirectory类,以及当我点击结果页中的任何超链接时,需要在浏览器的“新建”选项卡中打开相应的html文件

我怎样才能做到这一点


提前感谢…

尝试在运行时向WEB-INF添加内容是个坏主意。通常,它被打包到WAR中,而不是文件系统上的简单目录。改为使路径可配置(通过JNDI或简单的.properties文件),并使用外部的实际文件系统路径application@kaqqao谢谢你的帮助。我一定会按照你的建议做些改变。