lucene.net创建海量索引问题

问题描述

各位大神,萌新现在有个问题不知道怎么解决,比如说我有十张表,每个表里都有大量的数据,我怎么能将所有数据的每个字段都创建索引呢,如果说手动加的话,那岂不是非常麻烦?还有就是我怎么将这个数据库中所有表的所有数据全部抛给lucene来用于检索呢?急急急,跪求各位大神解决目前我市这么处理的:publicstringCreatLC(){try{stringsql="SELECT*FROMProduct";List<Product>a=newList<Product>();CreatLucene<Product>.PrepareIndex(newPanGuAnalyzer(),true,Config.INDEX_Product,a,sql);return"成功";}catch(Exception){return"失败";}}publicstaticvoidPrepareIndex(Analyzeranalyzer,boolb,stringpath,List<T>list,stringsql){//根据地址创建目录DirectoryInfodirInfo=Directory.CreateDirectory(path);//FSDirectory:指定索引库文件存放位置,是Diectory的子类//将索引文件存放在创建的目录dirInfo中LuceneIO.Directorydirectory=LuceneIO.FSDirectory.Open(dirInfo);//IndexWriter:对索引文件进行写的类IndexWriterwriter=newIndexWriter(directory,analyzer,b,IndexWriter.MaxFieldLength.LIMITED);DBHelperdb=DBHelper.GetInstance();list=db.Fetch<T>(sql);Typetype=typeof(T);PropertyInfo[]ps=type.GetProperties();foreach(variteminlist){CreateIndex(writer,item);}writer.Optimize();writer.Close();}///<summary>///创建索引///</summary>///<paramname="analyzer"></param>///<paramname="title"></param>///<paramname="content"></param>privatestaticvoidCreateIndex(IndexWriterwriter,Tentity){try{Documentdoc=newDocument();Typetype=typeof(T);PropertyInfo[]ps=type.GetProperties();foreach(PropertyInfopinps){objectvalue=p.GetValue(entity,null);if(value!=null){//if(p.Name=="pinyin")//{//doc.Add(newField(p.Name,value.ToString(),Field.Store.YES,Field.Index.ANALYZED));//存储且索引//}//else//{doc.Add(newField(p.Name,value.ToString(),Field.Store.YES,Field.Index.ANALYZED));//存储且索引//}}}writer.AddDocument(doc);}catch(FileNotFoundExceptionfnfe){throwfnfe;}catch(Exceptionex){throwex;}}

解决方案

解决方案二:
大神都哪去了,顶顶顶
解决方案三:
不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了当然缩引还是要定期执行的,手动自动,你自己可以实现luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索
解决方案四:
lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。
解决方案五:
引用2楼wyd1520的回复:

不需要全部缩引呀,只要缩引你要的字段,比录标题,内容,这两个就可以了当然缩引还是要定期执行的,手动自动,你自己可以实现luc本来就是只使用关键字段,而不是全部字段,这东西也是模糊搜索

但是我确实要对一些基础数据表中的大部分数据做索引啊,你看可不可以这样,就是在分词过后,直接把分好的词全部创建为索引,这样会不会导致系统运行很慢呢,而且有什么方法可以区分出这个索引是否已经被创建呢?
解决方案六:
引用3楼feiyun_Web的回复:

lucene.net没有更新这么一说,只有删除掉重新创建索引,每个表都需要自己去写过程,没有让你可以实现“数据库中所有表的所有数据全部抛给lucene来用于检索”的现成方法。所以你只需要定期的将新的信息创建进去,如果有变化的部分,比如说信息之类的,先将原来的IDKEY值删除,重新创建。

您说的很有道理,但是请问该怎么做呢,就我写的这段代码,您可以稍微指点下该怎么改吗?

时间: 2024-10-18 06:34:52

lucene.net创建海量索引问题的相关文章

解决Windows 7系统取消创建的索引方法

解决Windows 7系统取消创建的索引方法: 1.点击开始-搜索框输入"索引",在上方出现的提示中选择索引选项; 2.选择索引选项以后弹出菜单,选择"修改"; 3.把里面各项建立索引的勾去掉, 确定即可.

如何在win7电脑中取消已创建的索引?

  win7 64位旗舰版系统已经面世很久了,想必大家都对win7旗舰版电脑中的索引功能十分的熟悉了吧?是的,很多用户都喜欢使用到win7旗舰版电脑中的索引功能,因为创建索引可以提高咱们搜索的效率,让操作变得更加的方便快捷.那么创建了那么多的索引,没用的是不是应该清理掉呢?下面,小编就来详细的介绍一下,如何在win7旗舰版电脑中取消已创建的索引? 1.首先,咱们单击打开win7旗舰版电脑的开始菜单,之后,咱们点击搜索框,就在开始菜单最下面的位置,之后,咱们在这个搜索框中输入索引.在出现的搜索结果

win7系统如何取消创建的索引功能

  1.单击打开开始菜单,在打开的开始菜单中,可以看到最下方有一个搜索窗口,在这个窗口中输入"索引"二字,这样就会在开始菜单中出现搜索结果.直接点击选择其中的索引选项; 2.在打开的窗口中,可以看到该界面已经罗列了创建的索引路径了; 3.只需要在菜单中选择"修改"按钮,然后接着在打开的"索引位置"对话框中将已经创建好的索引勾取消掉,再点击确定按钮就可以了. win7系统上述方法操作就可以取消创建的索引功能,只要三个步骤,简单实用的小方法,希望能够

如何在win7旗舰版电脑中将已创建的索引取消掉?

  很多时候,咱们都需要在win7 64位旗舰版iso电脑中使用到搜索的功能,但是很多用户却发现这个搜索功能似乎并没有自己想象的那么容易,有时候会出现很慢的情况,这个时候怎么办呢?所以很多时候,咱们都会在自己的win7旗舰版电脑中创建索引,这是提高搜索效率的一个很好的方法.但是这个搜索在使用之后就没有什么作用了,存在只会造成资源的浪费,那么咱们如何才能在win7旗舰版电脑中取消已创建的索引呢?下面,小编就来介绍一下具体的操作方法吧! 1.首先,咱们单击打开win7旗舰版电脑的开始菜单,在打开的开

SqlServer(索引)--创建复合索引时,复合索引列顺序对查询的性能影响[转]

http://www.cnblogs.com/wy123/p/5604400.html SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因: 一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗? 二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来, 好了,废话打住, /* 20160814备注

[MySQL 源码] innodb如何创建二级索引

以下为分析问题时的随笔.写的很凌乱,仅做记录,以备后用...... ////////////////////////////////////////////////////////////// ha_innobase::add_index是innodb创建索引的接口函数. 以下所有的讨论都是基于创建一个非聚集的二级索引.因此一些过程是被省略掉了. 1.获取数据词典信息           indexed_table = dict_table_get(prebuilt->table->name,

error 1089-MySQL中在创建表的时候创建组合索引,为什么我加了索引长度后就提示错误呢?

问题描述 MySQL中在创建表的时候创建组合索引,为什么我加了索引长度后就提示错误呢? 这是在创建表的同时创建了组合索引,并且添加了索引长度100,然后提示 ERROR 1089 (HY000): Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support u nique pref

mysql 中存在null和空时创建唯一索引的方法_Mysql

好多情况下数据库默认值都有null,但是经过程序处理很多时候会出现,数据库值为空而不是null的情况.此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值,而创建索引失败,示例如下: 步骤1: mysql> select phone ,count(1) from User group by phone; +-----------------+----------+ | phone | count(1) | +-----------------+----------+ | NULL | 70

mssql创建视图索引方法详解

先看一个例子 你正在使用一个 SQL Server 2005 数据库,它包含一个名为 Customers 的表.其中 Customers 表包含如下的列定义:  代码如下 复制代码 Create Table Customers ( CustomerID Int , CompanyName Varchar(50) , FirstName Varchar(20) , LastName Varchar(20) , Picture Varbinary(max) , Address1 Varchar(30