`
javasss
  • 浏览: 66972 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

Luncene 之一 :创建索引(Luncene + paoding)

 
阅读更多
Luncene是什么就不介绍了。
下载地址:http://code.google.com/p/paoding/downloads/detail?name=paoding-analysis-2.0.4-beta.zip&can=2&q=
luncene的API:http://lucene.apache.org/java/2_9_1/api/all/index.html


学习代码:
http://cst.whut.edu.cn/news!showNews.action?newsID=153

一、先去网上Down下来 paoding-analysis-2.0.4-beta,解压,在lib目录找到lucene-core-2.2.0.jar,lucene-highlighter-2.2.0.jar,commons-logging.jar 这几个Jar包放到项目当中。

二、添加Paoding。 在项目中使用发现,直接添加paoding-analysis.jar会发生异常。所以我们不直接添加这个Jar,而是把Src目录下的所有文件(也就是源代码) copy 都我们项目的Src目录下;

三、把dic(词典)目录也copy 到我们项目的src下,并在Src目录新建一个包data.index,主要是用来存放生成的索引文件;

四、修改 paoding-dic-home.properties 这个属性文件

#values are "system-env" or "this";
#if value is "this" , using the paoding.dic.home as dicHome if configed!
#paoding.dic.home.config-fisrt=system-env

#dictionary home (directory)
#"classpath:xxx" means dictionary home is in classpath.
#e.g "classpath:dic" means dictionaries are in "classes/dic" directory or any other classpath directory
#paoding.dic.home=dic

#seconds for dic modification detection
#paoding.dic.detector.interval=60
paoding.dic.home=classpath:dic // dic 所在目录
paoding.dic.home.config-fisrt=this //应用当前的配置

五、在 package   net.paoding.analysis.knife 下找到PaodingMaker类, Ctrl + S + O 定位到

private static void setDicHomeProperties(Properties p) 这个方法,修改

private static void setDicHomeProperties(Properties p) {
   String dicHomeAbsultePath = p
     .getProperty("paoding.dic.home.absolute.path");
   if (dicHomeAbsultePath != null) {
    return;
   }
   // 获取词典安装目录配置:
   // 如配置了PAODING_DIC_HOME环境变量,则将其作为字典的安装主目录
   // 否则使用属性文件的paoding.dic.home配置
   // 但是如果属性文件中强制配置paoding.dic.home.config-first=this,
   // 则优先考虑属性文件的paoding.dic.home配置,
   // 此时只有当属性文件没有配置paoding.dic.home时才会采用环境变量的配置
   String dicHomeBySystemEnv = null;
   try {
    dicHomeBySystemEnv = getSystemEnv(Constants.ENV_PAODING_DIC_HOME);
   } catch (Error e) {
    log.warn("System.getenv() is not supported in JDK1.4. ");
   }
   String dicHome = getProperty(p, Constants.DIC_HOME);
   if (dicHomeBySystemEnv != null) {
    String first = getProperty(p, Constants.DIC_HOME_CONFIG_FIRST);
    if (first != null && first.equalsIgnoreCase("this")) {
     if (dicHome == null) {
      dicHome = dicHomeBySystemEnv;
     }
    } else {
     dicHome = dicHomeBySystemEnv;
    }
   }
   // 如果环境变量和属性文件都没有配置词典安转目录
   // 则尝试在当前目录和类路径下寻找是否有dic目录,
   // 若有,则采纳他为paoding.dic.home
   // 如果尝试后均失败,则抛出PaodingAnalysisException异常
   if (dicHome == null) {
    File f = new File("dic");
    if (f.exists()) {
     dicHome = "dic/";
    } else {
     URL url = PaodingMaker.class.getClassLoader()
       .getResource("dic");
     if (url != null) {
      dicHome = "classpath:dic/";
     }
    }
   }
   if (dicHome == null) {
    throw new PaodingAnalysisException(
      "please set a system env PAODING_DIC_HOME or Config paoding.dic.home in paoding-dic-home.properties point to the dictionaries!");
   }
   // 规范化dicHome,并设置到属性文件对象中
   dicHome = dicHome.replace('\\', '/');
   if (!dicHome.endsWith("/")) {
    dicHome = dicHome + "/";
   }
   p.setProperty(Constants.DIC_HOME, dicHome);// writer to the properites
   //修改部分
   String path="";
   try {
  
    path = URLDecoder.decode(getFile(dicHome).getPath(), "utf-8");
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
 
   // object
   // 将dicHome转化为一个系统唯一的绝对路径,记录在属性对象中
   File dicHomeFile = getFile(path);
//修改部分结束
   if (!dicHomeFile.exists()) {
    throw new PaodingAnalysisException(
      "not found the dic home dirctory! "
        + dicHomeFile.getAbsolutePath());
   }
   if (!dicHomeFile.isDirectory()) {
    throw new PaodingAnalysisException(
      "dic home should not be a file, but a directory!");
   }
   p.setProperty("paoding.dic.home.absolute.path", dicHomeFile
     .getAbsolutePath());
}

六、创建一个Servlet:AnalyzerServlet

package com.lunceneTest.servlet;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;

import com.lunceneTest.Model.News;
import com.lunceneTest.db.NewsDao;

public class AnalyzerServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = -822638045647816348L;

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

 
 
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


   try
   {
    this.createIndex();
  
   } catch (Exception e)
   {
    e.printStackTrace();
   }
}


public void createIndex() throws Exception
{
   //实例化分词器,使用中文分词器
   Analyzer analyzer =new PaodingAnalyzer();
 
 
   String path = URLDecoder.decode(AnalyzerServlet.class.getResource("/data/index").toString(),"UTF-8").replace("file:/","");
 
   System.out.println(path);
 
   FSDirectory directory = FSDirectory.getDirectory(path);
 
   // true表示覆盖原来已经创建的索引,如果是false表示不覆盖,而是继续添加索引
 
   IndexWriter writer = new IndexWriter(directory,analyzer,true);
 
 
   List<News> list = NewsDao.getAllNews(); // Dao层获取数据库新闻列表的方法
 
   for (News news : list) {
  
    Document doc = new Document();
  
    //Field.Index.UN_TOKENIZED 不分词
    Field id_filed = new Field(News.ID,String.valueOf(news.getId()),Field.Store.YES,Field.Index.UN_TOKENIZED);
    Field title_field = new Field(News.TITLE,news.getTitle(),Field.Store.YES,Field.Index.TOKENIZED);
    Field content_field = new Field(News.CONTENT,news.getContent(),Field.Store.YES,Field.Index.TOKENIZED);
  
    doc.add(id_filed);
    doc.add(title_field);
    doc.add(content_field);
  
    writer.addDocument(doc);
  
   }
   writer.optimize();
   writer.close();
 
 
}

}

到这里就基本完成了,运行后会发现data.index这个目录下多了很多文件

为了您的安全,请只打开来源可靠的网址
打开网站    取消
来自: http://hi.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/blog/item/1c386d2229742f5e9922ed49.html
分享到:
评论

相关推荐

    luncene jar包Java专用

    1. **索引构建**:Lucene的核心功能之一是创建倒排索引,这是一种数据结构,可以快速查找包含特定词汇的文档。开发者需要了解如何将文本数据转化为这种索引形式,包括文档的分词、词频计算以及如何存储这些信息。 2...

    Luncene2.0+Heritrix开发自己的搜索引擎01(源码)

    1. **索引创建**:Luncene 提供了 API 来创建和更新索引。你可以通过添加文档、字段和文本内容来构建索引。 2. **倒排索引**:Luncene 使用倒排索引来快速查找包含特定词汇的文档。每个词项关联一个列表,包含所有...

    luncene索引PDF、Html、word.txt

    - **索引**:Lucene的核心操作之一是创建索引。索引是一种数据结构,它存储了文档的内容以及元数据,便于后续的搜索操作。 - **Analyzer**:分析器用于解析文档内容并将其转换为一系列可被索引的词条。例如,`...

    luncene建索引的基本实例

    Segment 是 Lucene 中的索引文件的基本单元,当添加索引时,并不是每个 Document 都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,里每个小文件都是一个 Segment。...

    Luncene2.0+Heritrix开发自己的搜索引擎

    2. **倒排索引**:Luncene 使用倒排索引来快速定位包含特定关键词的文档,这是搜索引擎核心算法的一部分。 3. **多字段搜索**:可以对多个字段进行同时搜索,如标题、内容、作者等。 4. **实时索引**:Luncene ...

    Luncene API

    Luncene的API,详细接受了Luncene的使用方法

    luncene in action中文版

    luncene in action中文版 doc格式

    全文搜索luncene.Net

    - `QuartzTest`可能涉及到Quartz.NET,一个.NET平台上的计划任务调度库,可能用于定期执行搜索索引更新等任务。 通过这些文件,我们可以深入学习如何在实际项目中结合其他技术如日志记录、缓存管理和任务调度,来...

    luncene api

    - 可以选择在内存中或磁盘上创建索引,以平衡性能和资源消耗。 6. **实时性和持久性**: - Lucene提供近乎实时的搜索,即索引更新后,新的文档或修改后的文档在很短时间内可被搜索到。 - 索引的持久性是通过定期...

    中文分词器(mmseg4j + luncene5.X)源码+jar包

    然后,我们需要创建一个自定义的Analyzer,继承自Lucene的Analyzer类,并在其中使用mmseg4j进行分词。以下是一个简单的示例: ```java import com.cnblogs.mmseg4j.MinSeg; import org.apache.lucene.analysis....

    基于Java web SSM框架的新闻网站系统(源码+数据库).zip

    ## 一个用SSM写的一个新闻系统 框架:`SpringMVC+Spring+Mybatis` 后台前端:`bootstrap` 安全认证:`shiro` 全文检索:`lucence` 文本编辑器:`ueditor` 前端主题:`hexo` jquery效果:`粒子效果...

    基于idae Java web的SSM框架的在线新闻系统(源码+数据库).rar

    # Blog## 一个用SSM写的一个新闻系统框架:`SpringMVC+Spring+Mybatis` 后台前端:`bootstrap` 安全认证:`shiro` 全文检索:`lucence` 文本编辑器:`ueditor` 前端主题:`hexo` jquery效果:`粒子效果`...

    ASP.NET with Luncene.net

    在实际开发中,首先需要在ASP.NET应用中引入Lucene.NET的库,然后创建一个索引器类,该类负责读取数据并用Lucene.NET建立索引。索引完成后,可以创建一个搜索服务类,用于接收用户的查询,执行查询操作,并返回结果...

    基于Java的Luncene的compass框架说明使用技术文档.pdf

    ### 基于Java的Luncene的Compass框架说明使用技术文档 #### 一、原理描述 Compass是一款优秀的开源Java搜索引擎框架,它能够帮助应用程序实现更为强大的搜索引擎语义能力。Compass依赖于顶级的Lucene搜索引擎,并...

    luncene in action 003

    标题与描述均为“luncene in action 003”,但是需要注意的是正确的拼写应为“Lucene in Action”,这是一本介绍Apache Lucene的书籍。由于提供的部分内容仅包含了一些重复的试读版本声明及网址,并未提供具体的章节...

    luncene.net 完整实例

    **一、创建索引** 1. **初始化索引器(Analyzer)**:Analyzer 负责将输入的文本分解为一系列可搜索的术语。Lucene.NET 内置了多种 Analyzer,例如 StandardAnalyzer,适用于大多数情况。对于 PDF 和 DOCX 文件,...

    luncene

    luncene 简单的开原项目

    支持lucene4.0的paoding分词

    支持lucene4.0的paoding分词

    java+lucene)1236.rar_Lucene 搜索_Luncene_lucene_lucene web

    【标题】"java+lucene)1236.rar_Lucene 搜索_Luncene_lucene_lucene web" 提供的信息表明这是一个使用Java和Lucene框架实现的搜索系统,特别是针对公交数据的搜索。Lucene是Apache软件基金会的一个开源全文检索库,...

Global site tag (gtag.js) - Google Analytics