package com.lucene;
 
import java.io.IOException;
 
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
 
public class UpdateDocument {
     
    private static String path = "d:/index";
     
     
    public static void main(String[] args){
//        addIndex();
        updateIndex();
        search("李四");
        search("王五");
    }
     
    public static void addIndex(){
        try {
            IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),true);
             
            Document doc = new Document();
            doc.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));
            doc.add(new Field("userName","张三",Field.Store.YES,Field.Index.TOKENIZED));
            doc.add(new Field("comefrom","北京",Field.Store.YES,Field.Index.TOKENIZED));
             
            write.addDocument(doc);
             
            write.close();
             
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
     
    public static void updateIndex(){
        try {
             
            IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),false);
            Document docNew = new Document();
            docNew.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));
            docNew.add(new Field("userName","王五",Field.Store.YES,Field.Index.TOKENIZED));
            Term term = new Term("id","123456");
            /**
              调用updateDocument的方法,传给它一个新的doc来更新数据,
              Term term = new Term("id","1234567");
              先去索引文件里查找id为1234567的Doc,如果有就更新它(如果有多条,最后更新后只有一条)。如果没有就新增.
             
              数据库更新的时候,我们可以只针对某个列来更新,而lucene只能针对一行数据更新。
             */
            write.updateDocument(term, docNew);
             
            write.close();
             
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public static Query queryParser(String str){
        QueryParser queryParser = new QueryParser("userName", new StandardAnalyzer());
        try {
            Query query =  queryParser.parse(str);
            return query;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
     
    public static void search(String str){
        try {
            IndexSearcher search = new IndexSearcher(path);
             
            Query query = queryParser(str);
             
            Hits hits = search.search(query);
            if(hits==null){
                return;
            }
            if(hits.length() == 0){
                System.out.println(" 没有搜索到'" + str+"'");
                return;
            }
            for (int i = 0; i < hits.length(); i++) {
                Document doc = hits.doc(i);
                System.out.println("id = "+hits.id(i));
                System.out.println("own id = " + doc.get("id"));
                System.out.println("userName = "+doc.get("userName"));
                System.out.println("come from  = "+doc.get("comefrom"));
                System.out.println("");
            }
             
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

Lucene add、updateDocument添加、更新与search查询(转)的更多相关文章

  1. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  2. 给当前的URL添加/更新新的参数

    /** * 给当前的URL添加/更新新的参数 * @param a 参数 * @param b 值 * @returns {string} 新的参数 * @constructor */ functio ...

  3. day 68crm(5) 分页器的进一步优化,以及在stark上使用分页器,,以及,整理代码,以及stark组件search查询

    前情提要: 本节内容 自定制分页器 保存及查询记录 代码整理, stark组件search 查询    一:自定制分页器 page 1:创建类 Pagination  # 自定制分页器 _ _init ...

  4. Dom4j 添加 / 更新 / 删除 XML

    1.获得文档 /** *1.获得解析流 *2.解析XML */ 2.添加 /** *1.获取父元素 *2.创建元素 *3.创建属性并添加到元素中 *4.元素添加到根节点 */ 3.更新 /** *1. ...

  5. MVC客户管理(添加、修改、查询、分页)

    ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页)   目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2 ...

  6. POJ 3468 A Simple Problem with Integers(线段树模板之区间增减更新 区间求和查询)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 140120 ...

  7. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化

    秋实大哥与小朋友 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...

  8. 2017 Wuhan University Programming Contest (Online Round) D. Events,线段树区间更新+最值查询!

    D. Events 线段树区间更新查询区间历史最小值,看似很简单的题意写了两天才写出来. 题意:n个数,Q次操作,每次操作对一个区间[l,r]的数同时加上C,然后输出这段区间的历史最小值. 思路:在线 ...

  9. git add 命令添加所有改动内容

    git add xx命令可以将xx文件添加到暂存区,如果有很多改动可以通过 git add -A .来一次添加所有改变的文件. 注意 -A 选项后面还有一个句点. git add -A表示添加所有内容 ...

随机推荐

  1. vultr vps注册和后台教程

    我用了一年多vultr vps,感觉相当满意.我算是vultr最早的一批用户了,当时他们充值多少赠送多少,吸引大批新用户搬家到vultr,给linode和digitalocean vps不少的市场压力 ...

  2. ListCtrl中垂直滚动条自动滚动

    在用ListCtrl控件时,当向该控件中添加数据时,怎么样可以把滚动条时时滚动到最后一行,这样便可看到添加的新数据内容 1 加完数据后执行 EnsureVisible(最后一行索引) 可以保证滚动到最 ...

  3. css3动画 9步

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 比较全的 C# 操作 Word的代码

    using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word; ...

  5. MyBatis 基本数据类型条件判断问题

    1.判断参数使用:_parameter <select id="findCount" parameterType="int" resultType=&qu ...

  6. buffer小解

    Buffer代表一个缓冲区,存储二进制数据,是字节流 创建: 创建Buffer有4种方式: 1.new Buffer(size) 以字节为单位创建指定大小的Buffer eg: var buf= ne ...

  7. 配置php开发环境

    安装apache 1 loadModule 加载php的模块2 addType 告诉apache凡是php结尾的文件都交给php模块执行3 PHPIniDir 告诉apache php.ini的文件在 ...

  8. bootstrap ch2清除浮动+12

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  9. mybatis------xml的一些规范等

    转与拼接: MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML ...

  10. OC-之AFNetworking

    AFNetworking介绍与用法: http://cocoadocs.org/docsets/AFNetworking/2.4.1/index.html