问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用java语言建立多个索引?

发布网友 发布时间:2022-04-13 02:48

我来回答

1个回答

热心网友 时间:2022-04-13 04:17

使用jdbc技术连接数据库
使用语句对象statement的execute方法可以执行对索引的操作
例如代码如下

public class IndexFiles {
//使用方法:: IndexFiles [索引输出目录] [索引的文件列表] ...
public static void main(String[] args) throws Exception {
String indexPath = args[0];
IndexWriter writer;
//用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)
writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);

for (int i=1; i<args.length; i++) {
System.out.println("Indexing file " + args[i]);
InputStream is = new FileInputStream(args[i]);

//构造包含2个字段Field的Document对象
//一个是路径path字段,不索引,只存储
//一个是内容body字段,进行全文索引,并存储
Document doc = new Document();
doc.add(Field.UnIndexed("path", args[i]));
doc.add(Field.Text("body", (Reader) new InputStreamReader(is)));
//将文档写入索引
writer.addDocument(doc);
is.close();
};
//关闭写索引器
writer.close();
}
}
public class Search {
public static void main(String[] args) throws Exception {
String indexPath = args[0], queryString = args[1];
//指向索引目录的搜索器
Searcher searcher = new IndexSearcher(indexPath);
//查询解析器:使用和索引同样的语言分析器
Query query = QueryParser.parse(queryString, "body",
new SimpleAnalyzer());
//搜索结果使用Hits存储
Hits hits = searcher.search(query);
//通过hits可以访问到相应字段的数据和查询的匹配度
for (int i=0; i<hits.length(); i++) {
System.out.println(hits.doc(i).get("path") + "; Score: " +
hits.score(i));
};
}
}在整个检索过程中,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据需要进行定制。

分 析:

索引过程中可以看到:

语言分析器提供了抽象的接口,因此语言分析(Analyser)是可以定制的,虽然lucene缺省提供了2个比较通用的分析器SimpleAnalyser和StandardAnalyser,这2个分析器缺省都不支持中文,所以要加入对中文语言的切分规则,需要修改这2个分析器。

Lucene并没有规定数据源的格式,而只提供了一个通用的结构(Document对象)来接受索引的输入,因此输入的数据源可以是:数据库,WORD文档,PDF文档,HTML文档……只要能够设计相应的解析转换器将数据源构造成成Docuement对象即可进行索引。

对于大批量的数据索引,还可以通过调整IndexerWrite的文件合并频率属性(mergeFactor)来提高批量索引的效率。

总 结:

搜索结果返回的是Hits对象,可以通过它再访问Document==>Field中的内容。假设根据body字段进行全文检索,可以将查询结果的path字段和相应查询的匹配度(score)打印出来,

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...结构的施工分包给其他单位那么是不是EPC总承包就不能分包 Win11玩不了地平线4如何解决_Win11玩不了地平线4怎么办 Win11玩不了地平线4如何解决_Win11玩不了地平线4怎么解决 地平线5警告显卡内存过低怎么办 极限竞速地平线5闪退怎么解决 极限竞速地平线5闪退解决方法 怎样册除手机屏幕上(精品游戏)图标 烧结普通砖有哪些 烧结普通砖都有哪些 ...4年后的年龄与弟弟3年前的年龄和是35岁。今年哥与弟各几岁??_百度... ...等于弟弟7年后的年龄,哥哥4年后与弟弟3年前的年龄的和是35岁。哥哥... 范曾大师的87年三羊开泰值多少钱? 范曾的字画多少钱一平尺,为什么价格这么高 范曾字画的价格一般多少钱 范曾字画可以卖多少钱 苹果用什么清理软件 上海野生动物园65岁以上老人票是 六十五岁以上的老人去上海野生动物园怎样收费? 求一个微信群发软件 请问上海野生动物园的门票七十岁以上老人有优惠吗 上海野生动物园六十岁以上老人怎样收费 60岁以上去上海野生动物园门票价格? 上海野生动物园老年人票价 上海动物园69老人收门票吗 上海野生动物园70岁老人免票吗 余易贷:p2p平台哪些运营数据需要重点关注? 什么样的P2P平台资产端合规 请问在p2p公司的项目经理职位重要嘛?与产品经理相比呢? 答投友问:P2P资产端模式到底哪种好 P2P平台资产端来源有哪些 金融公司里,资产端是什么意思?可以的话请详细说一下。谢谢。。。 注册不了怎么办? 新手机号怎么注册不了 心理有什么特征 新手机号怎么注册不了怎么办? 简述心理现象主要包括几个内容 积极健康的心理状态具体表现为哪些方面? 为什么微信注册不了,微信说要更新但已经是最新的版本? 小时候一部动画片一男孩驾驶一个魔方飞船名字谁知道? 一( )飞船 心理现象的主要表现形式有哪些? 动画片90年代的 只记得有魔方一样的飞船(不是魔方大厦) 我的电信卡怎么注册不了? 心理的特征 为何申请不了? 偏激心理的主要表现是什么? 办农业银行卡年龄是多少 树脂井盖相较于其他类型的井盖有什么创新吗? 飞船如何安全着陆 T是什么意思?M又是什么意思? 井盖有哪些类型,哪种质量好?