lucene 3.0.2 + 多文件夹微博数据(时间,微博)构建索引

package lia.meetlucene;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
//import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class Unicode1 {

    static boolean numTime = false;
    static boolean numText = false;
    static String timeTmp = null;
    static String textTmp = null;

    static void indexer(IndexWriter writer) throws CorruptIndexException, IOException
    {
        org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();
        Field field = new Field("context",textTmp,Field.Store.YES,
                Field.Index.ANALYZED);
        doc.add(field);

        field = new Field("time",timeTmp,Field.Store.YES,
                Field.Index.NOT_ANALYZED);
        doc.add(field);

        writer.addDocument(doc);
        //System.out.println("微博: " + textTmp+ "  "+timeTmp);
    }

    static void Dfs(NodeList nodecur,IndexWriter writer) {
        for (int j = 0; j < nodecur.getLength(); j++) {

            if ("timestamp".equals(nodecur.item(j).getNodeName())) // 输出pass
            {
                //System.out.println("时间: " + nodecur.item(j).getTextContent());
                timeTmp = nodecur.item(j).getTextContent();
                numTime = true;
            }
            /*
             * else if ("origtext".equals(nodecur.item(j).getNodeName()))
             * System.out.println("原微博: " + nodecur.item(j).getTextContent());
             */
            else if ("text".equals(nodecur.item(j).getNodeName())) // 输出code
            {
                //System.out.println("微博: " + nodecur.item(j).getTextContent());
                textTmp = nodecur.item(j).getTextContent();
                numText = true;
            }
            if(numText&&numTime)
                try {
                    indexer(writer);
                    numText = false;
                    numTime = false;
                } catch (CorruptIndexException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            NodeList childNodes = nodecur.item(j).getChildNodes();
            Dfs(childNodes,writer);
        }
    }

    public static void main(String[] args) throws IOException {

        long a = System.currentTimeMillis();

        // String dataDir ="C:/Users/Administrator/Desktop/xdj/tengxun/A__Vae";
        //File dataDir = new File("C:/Users/Administrator/Desktop/xdj/tengxun");
        //String indexDir = "C:/Users/Administrator/Desktop/xdj/suoyin";
        File dataDir = new File("E:/xdj/tengxun");
        String indexDir = "E:/xdj/tengxunsuoying";
        Directory dir = FSDirectory.open(new File(indexDir));

        IndexWriter writer = new IndexWriter(dir,
                new SmartChineseAnalyzer(Version.LUCENE_20),
                //new StandardAnalyzer(Version.LUCENE_30),
                true,
                IndexWriter.MaxFieldLength.UNLIMITED);

        LinkedList list = new LinkedList();
        File file[] = dataDir.listFiles();
        for (int i = 0; i < file.length; i++) {
            if (file[i].isDirectory())
                list.add(file[i]);
        }
        File tmp;
        int num = 0;
        while (!list.isEmpty()) {

            tmp = (File) list.removeFirst();
            file = tmp.listFiles();
            for (int i = 0; i < file.length; i++) {
                System.out.println(file[i].getAbsolutePath());

                Element element = null;
                // documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)
                DocumentBuilder db = null;
                DocumentBuilderFactory dbf = null;
                try {
                    // 返回documentBuilderFactory对象
                    dbf = DocumentBuilderFactory.newInstance();
                    // 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象
                    db = dbf.newDocumentBuilder();
                    // 得到一个DOM并返回给document对象
                    Document dt = db.parse(file[i]);
                    // 得到一个elment根元素
                    element = dt.getDocumentElement();
                    // 获得根节点
                    System.out.println("根元素:" + element.getNodeName());
                    // 获得根元素下的子节点

                    Dfs(element.getChildNodes(),writer);

                    num++;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            System.out.println(System.currentTimeMillis() - a + "    " + num);
        }
        writer.close();

    }
}

时间: 2024-10-08 16:34:40

lucene 3.0.2 + 多文件夹微博数据(时间,微博)构建索引的相关文章

Cocos2d-x 3.0新引擎文件夹结构

Cocos2d-x 3.0新引擎文件夹结构 2014年4月29日  Cocos2d-x 3.0学习 作为一个Cocos2d-x的菜鸟,我倒是挺愿意关注不同版本号之间的差别,Cocos2d-x 3.0自2013年7月份開始公布alpha0-pre版本号,到2014年4月23日公布正式版,历经9个版本号,总算是敲定了.我刚入手的配置环境是基于Cocos2d-x 2.2.3版本号的,略微对照一下,就能够知道最新公布的3.0正式版真的齐整了非常多.看看以下两张截图 Cocos2d-x 2.2.3版本号文

Zend Studio 12.0.2打开文件夹项目

1)[文件]=>[新建]=>[PHP Project from Existing Directory] 2)输入项目名称,选择文件位置. 3)完成. 版权声明: 1)原创作品,出自"CleverCode的博客",转载时请务必注明以下原创地址,否则追究版权法律责任. 2)原创地址:http://blog.csdn.net/clevercode/article/details/46047247(转载务必注明该地址). 3)分类地址(PHP程序员技术精粹):http://blog

Hadoop MultipleOutputs 结果输出到多个文件夹 出现数据不全,部分文件为空

如题:出现下图中的情况(设置reduceNum=5) 感觉很奇怪,排除了很久,终于发现是一个第二次犯的错误:丢了这句 this.mOutputs.close(); 加上这句,一切恢复正常!

linux查找文件夹下的全部文件里是否含有某个字符串

查找文件夹下的全部文件里是否含有某个字符串 find .|xargs grep -ri "IBM" 查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称 find .|xargs grep -ri "IBM" -l 1.正則表達式 (1)正則表達式一般用来描写叙述文本模式的特殊使用方法,由普通字符(比如字符a-z)以及特殊字符(称为元字符.如/.*.?等)组成. (2)基本元字符集及其含义 ^ :仅仅匹配行首. 如^a 匹配以a开头的行abc,a2e,

Linux 用C语言判断文件和文件夹

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> int access(const char *pathname, int mode); int is_file_exist(const char*file_path){ if(file_path==NULL){ return -1; } if(access(file_path,F_OK)==0){ re

C盘目录下的文件夹

C盘根目录常见文件夹 Documents and Settings/用户:Win7中的"用户"文件夹跟XP中的"Documents and Settings"文件夹是一样的用途,用于存储用户的设置,包括用户文档.上网浏览信息.配置文件等数据 Downloads:这通常是下载软件的默认下载路径,建议下载软件时把路径改到其他硬盘分区去 Drivers:部分驱动程序的文件夹 Favorites:收藏夹   Program Files:应用程序文件夹,一般软件默认都安装在这

文件和文件夹操作

一.文件操作 1.File类的常用静态方法: void AppendAllText(string path, string contents),将文本contents附加到文件path中 bool Exists(string path)判断文件path是否存在 string[] ReadAllLines(string path) 读取文本文件到字符串数组中 string ReadAllText(string path) 读取文本文件到字符串中 void WriteAllText(string p

递归和非递归方法得到某文件夹中的全部文件和文件夹

/*******************************************************递归实现***************************************************/ /** * 获取某文件夹的所有文件 * @param filePath 获取文件的文件夹路径 * @param myFiles 保存文件的文件集合 * @return  所有的文件及文件夹 * @throws IOException */ public static Arr

linux:文件及文件夹管理

http://blog.csdn.net/pipisorry/article/details/39854265 查看用户的信息 pika:~$id pikauid=1000(pika) gid=1000(pika) groups=1000(pika),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),125(docker) 文件夹与路径 cd:变换目弽pwd:显示弼前目弽mkdir:建立一个新的文