Lucene 4.4 根据Int类型字段删除索引

1、方法一,通过Term删除
Term构造中没有,Int类型需要转换成Lucene自带的类BytesRef 。

    /**
     * 根据商品ID删除索引文件
     * @param id
     */
    public void deleteDocument(int id)
    {;
        File file = new File("E://index");
        IKAnalyzer analyzer = new IKAnalyzer();
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_44, analyzer);
        IndexWriter indexWriter = null;
        Directory directory;
        try {
            directory = FSDirectory.open(file);
            // 创建 IndexWriter
            indexWriter = new IndexWriter(directory, indexWriterConfig);
	  	   		BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT);
                    		NumericUtils.intToPrefixCoded(id, 0, bytes);
                    		Term term = new Term(field, bytes);

            indexWriter.deleteDocuments(term);
            indexWriter.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }

2.方法二,使用NumericRangeQuery

/**
     * 根据商品ID删除索引文件
     * @param id
     */
    public void deleteDocument(int id)
    {;
        File file = new File("E://index");

        IKAnalyzer analyzer = new IKAnalyzer();
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_44, analyzer);

        IndexWriter indexWriter = null;

        Directory directory;
        try {
             directory = FSDirectory.open(file);
             // 创建 IndexWriter
             indexWriter = new IndexWriter(directory, indexWriterConfig);
	  	   		Query numbericRangeQuery = NumericRangeQuery.newIntRange("ID",id-1, id+1, false, false);
             indexWriter.deleteDocuments(numbericRangeQuery);
             indexWriter.close();

             } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
             }           

    }
时间: 2024-10-11 12:16:04

Lucene 4.4 根据Int类型字段删除索引的相关文章

crm2011创建int类型字段

using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Metadata; /// <summary> /// Int /// </summary> public class CreateIntAttribute { private string entityName = "new_class"; public void Cr

使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法

当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType="int"> SELECT id FROM user WHERE userName = #{userName} </select> 会报错如下: org.springframework.web.util.NestedServletException: Request p

mysql 中int类型字段unsigned和signed的探索

转自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正负数问题 拿tinyint字段来举例,unsigned后,字段的取值范围是0-255,而signed的范围是-128 - 127. 那么如果我们在明确不需要负值存在的情况下,通常是不要设置signed来支持负数的. 因为只支持正数会让存储空间大一倍呢(当然我这种表达可能不准确). 假设我们使用tinyint来存储一些状态值. 0表示删除,1表示待付款,2表示已付款,3....

sqoop导入时删除string类型字段的特殊字符

如果你指定了\n为sqoop导入的换行符,mysql的某个string字段的值如果包含了\n, 则会导致sqoop导入多出一行记录. 有一个选项 -hive-drop-import-delims Drops \n, \r, and \01 from string fields when importing to Hive. 这样\n \r 和\01都被自动删除,不会捣乱了.sqoop导入时删除string类型字段的特殊字符,布布扣,bubuko.com

MySQL中int类型的字段使用like查询方法

方法参考自: http://stackoverflow.com/questions/8422455/performing-a-like-comparison-on-an-int-field 也就是使用CAST转换指定字段,然后进行比较.具体样例代码如下: SELECT ProductID, ProductName FROM Products WHERE CAST(ProductID as CHAR) LIKE '%15%' 但是这样做的话,MySQL不能使用对应int字段索引,而且like本身就

如何把datetime类型字段修改为int类型

如何把datetime类型字段修改为int类型 我有一个表为:table1 其中有一个datetime类型的字段  a    现在我想我想把字段a的类型改为int类型 当我执行以下命令时报如下的错误alter table table1 alter column a int null报错:不充许从数据类型datetime到数据类型int的隐性转换   表table1,列a 请用convert函数来运行此查询 本人想求:能不能通过alter命令来修改得出呢?中间通过什么转换函数直接出呢.如conve

SQL Server中TEXT类型字段值在数据库中追加字符串方法

在数据上我们往往会遇到ntext大文本类型,这种类型如果和 nvarchar类型相加会出现问题,所以有一中方法可以解决这种问题. 使用的sql   函数: TEXTPTR:返回要更新的 text.ntext 或 image 数据的文本指针的值. UPDATETEXT :在适当的位置更改 text.ntext 或 image 列的一部分 WRITETEXT: 来更新和替换整个 text.ntext 或 image 字段 举例: CREATE TABLE [dbo].[aa]( [ID] [int]

asp.net MVC Model 类的主键 int类型、string类型、GUID类型。

在使用asp.net mvc进行定义 模型类的时候,一般情况下,我们都会定义一个属性为 int iD{get;set;} 或为int ClassNameID {get;set;},在这种情况下 1.Int类型主键 EF的默认约定就是第一个属性如果是类名+id或是id(这两情况下id字母大小写没有关系),并且是int类型的,那么直接设置第一个属性为主键,同时设置自增长.不需要指定[Key]关键字(在 System.ComponentModel.DataAnnotations.Schema命名空间下

mysqlint类型的长度值mysql在建表的时候int类型后的长度代表什么

详解mysql int类型的长度值 mysql在建表的时候int类型后的长度代表什么 是该列允许存储值的最大宽度吗 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个长度1并不代表允许存储的宽度,但却没有一个合理的解释. 或者说对这个长度也没有真正的研究过到底代表什么, 平时都用int(11), 也不知道为什么要11位. 所以我在网上查阅了一些资料, 也仔细的看了mysql手册关于int data type的说法. 以下是每个整数类型的存储和范围