Lucene实现索引和查询(2)

      在Oracle官网下载符合系统版本的压缩包,网址如下。点击安装,根据提示进行安装,在安装过程中会提示是否安装jre,点击是。                                                         

  2.设置环境变量:

      (1)右键计算机=》属性=》高级系统设置=》环境变量=》系统变量=》新建=》JAVA_HOME:安装路径

      (2)Path中新增=》%JAVA_HOME%\bin

   3.测试是否成功:

     开始=》运行=》CMD  回车 在弹出的 DOS 窗口内

      输入:java -version 会出现版本信息,

      输入: javac出现 javac 的用法信息

      出现如图2-1所示为成功。

Lucene实现索引和查询

图2-1:cmd命令框测试java配置

编写Java代码实现对网页内容的获取

    因为Lucene针对不同语言要使用不同的分词器,英文使用标准分词器,中文选择使用smartcn分词器。在获取网页的时候,先获取网页存为html文件,在html中由于标签           的干扰,会对检索效果产生影响,因此需要对html标签进行剔除,并将文本内容转为txt文件进行保存。中英文除了分词器不同,其他基本一致,因此之后的代码和实验结果演            示会选择任一。本文选取五十篇中文故事和英文故事的网页为例。

具体代码设计如下图:Url2Html.java将输入网址的网页转存为html文件,Html2Txt.java文件实现html文档标签的去除,转存为txt文档。具体代码如图3-1和3-2。

 

public void way(String filePath,String url) throws Exception{ File dest = new File(filePath);//建立文件 InputStream is;//接收字节输入流 FileOutputStream fos = new FileOutputStream(dest);//字节输出流 URL wangzhi = new URL(url);//设定网址URL is = wangzhi.openStream(); BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲 BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲 /* * 对字节进行读取 */ int length; byte[] bytes = new byte[1024*20]; while((length = bis.read(bytes, 0, bytes.length)) != -1){ fos.write(bytes, 0, length); } /* * 关闭缓冲流和输入输出流 */ bos.close(); fos.close(); bis.close(); is.close(); }

 

 

public String getBody(String val){
  String zyf = val.replaceAll("</?[^>]+>", ""); //剔出<html>的标签
  return zyf;
}

public void writeTxt(String Str,String writePath) {
  File writename = new File(writePath);
  try {
    writename.createNewFile();
    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
  �� out.write(Str);
    out.flush();
    out.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

以童话故事《笨狼上学》的网页为例,文档路径设为”E:\work \lucene \test \data \html”和”E:\work\lucene\test\data\txt”,在每一次读取网页的时候需要设定的两个参数为文件命名filename和获取目标网址url。新建一个main函数,实现对两个方法的调用。具体实现如图3-3所示:

 

  public static void main(String[] args) {
    String filename = "jingdizhi";//文件名字
    String url = "http://www.51test.net/show/8072125.html";//需要爬取的网页url
    String filePath = "E:\\work\\lucene\\test\\data\\html\\"+filename+".html";//写出html的文件路径+文件名
    String writePath = "E:\\work\\lucene\\test\\data\\txt\\"+filename+".txt";//写出txt的文件路径+文件名

    Url2Html url2html = new Url2Html();
    try {
      url2html.way(filePath,url);
    } catch (Exception e) {
      e.printStackTrace();
    }

    Html2Txt html2txt = new Html2Txt();
    String read=html2txt.readfile(filePath);//读取html文件
    String txt = html2txt.getBody(read);//去除html标签
    System.out.println(txt);
    try {
      html2txt.writeTxt(txt,writePath);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

执行程序后,分别在两个文件夹中建立”笨狼上学.html”和”笨狼上学.txt”。

建立索引

索引和查询的基本原理如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b267b3b237a20bf36436ddbcf7ac3d25.html