zoukankan      html  css  js  c++  java
  • 基于Heritrix+Lucene的搜索引擎构建

    系统功能需求:

    1.可自定义要搜索的网站列表;

    2.可对目标列表网站的网页内容进行检索。

    系统主要功能模块:

    网络蜘蛛:采集、解析并保存目标列表网站的内容(网页)。

    全文索引/检索:为目标列表网站内容建立索引,提供内容的全文检索。

    采取方案:

    网络蜘蛛——采用开源框架Heritrix,Heritrix是一个爬虫框架,可加如入一些可互换的组件。下载页面:http://crawler.archive.org/index.html。如何使用Heritrix可参考相关文献,也可笔者的《使用Heritrix爬虫爬取网页》。这里不再进行详细阐述。

    全文索引/检索——该部分基于Lucene实现的。Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene官方网站:http://lucene.apache.org/

    Lucene索引过程的核心类:
    IndexWriter :提供对索引的写入操作
    Directory:描述了索引存放的位置
    Analyzer:对文本进行分析,提取词汇(token),剔除无用的信息
    Document:虚拟的文档
    Field:每个Document包含一个或多个不同命名的Field,每个Field对应一段数据,这些数据在搜索过程中可能会被查询或在索引中被检索。

    示例代码: 

    复制代码
    Directory dir = FSDirectory.getDirectory(indexDir);
    Analyzer anlyzer = new SimpleAnalyzer();
    IndexWriter writer = new IndexWriter(dir, analyzer, true);
    Document doc = new Document();
    doc.add(Field.Keyword(“id”, “1000”);
    doc.add(Field.UnIndexed(“name”, “Yao Ming”);
    doc.add(Field.UnStored(“intro”, “Yao Ming is a player of Houseton Rockets.”);
    writer.addDocument(doc);
    writer.close();
    复制代码

    Lucene搜索过程的核心类:

    IndexSearcher:用于搜索IndexWriter创建的索引
    Term:用于搜索的一个基本单元包括了一对字符串元素,与Field相对应
    Query :抽象的查询类
    TermQuery:最基本的查询类型,用来匹配特定Field中包含特定值的文档
    Hits:存放有序搜索结果指针的简单容器

    示例代码:

    IndexSearcher searcher = new IndexSearcher(directory);
    Term t = new Term(“intro”, “Yao”);
    Query query = new TermQuery(t);
    Hits hits = searcher.search(query);
    assertEquals(“JUnit test”, 1, hits.length());

    在Heritrix下载获取网页资源后,需要对网页内容进行提取,提取网页内容在java世界中,可以使用HtmlParser或者Jsoup等开源软件。
    HtmlParser——htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。下载地址:http://sourceforge.net/projects/htmlparser/

    Jsoup——jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。官方网站:http://jsoup.org/

    在使用Lucene建立索引时,需要进行切词,lucene自带了一些切词工具,但主要是面向英文和德文的,中文没有英文那样明显的空格隔开词汇,因此需要另外加入中文切词功能。中文分词相关的工具有很多,比如IKAnalyzer 、ictclas4j、Je—Analyer等

    整个系统主要是基于Heritrix和Lucene实现的,可以基于这两个框架上搭建和完善搜索引擎。

     
     
    分类: 搜索引擎
  • 相关阅读:
    Rraspberry Pi 4B python3 安装opencv
    如何用arduion制作智能 垃圾桶
    MySQL(二)表结构的管理
    MySQL(一)基础操作
    vc++绘图基础
    网站签~
    (转)Oracle 知识日常积累
    利用反射判断bean属性不为空(null和空串)
    (转)Oracle 单字段拆分成多行
    svn 解决树冲突
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2843704.html
Copyright © 2011-2022 走看看