当前位置: 首页 > 知识库问答 >
问题:

重用文档和字段实例提高Lucene索引性能的问题

栾昂雄
2023-03-14

改进Lucene索引性能的方法有很多,我从这个网站上得到了许多改进索引速度的技巧,包括:

  1. 多线程在索引中的应用通过覆盖IndexWriter的几个方法,即:AddDocument UpdateDocument,这给我带来了大量的性能改进(大约快了7、8倍)。
  2. 重用文档和字段实例。根据提示,它说:“最好创建一个文档实例,然后向其中添加多个字段实例,但保留这些字段实例,并通过为每个添加的文档更改它们的值来重用它们”。
private static Document doc = new Document();
private static Field uinField = new StringField("uin", "", Store.YES);
private static Field nameField = new StringField("name", "", Store.YES);
private static Field urlField = new StringField("url", "", Store.YES);
private static Field servField = new TextField("services", "", Store.YES);
uinField.setStringValue(String.valueOf(p.getUin()));
nameField.setStringValue(p.getName());
urlField.setStringValue(p.getUrl());
servField.setStringValue(p.getService());    
doc.add(uinField);
doc.add(nameField);
doc.add(urlField);
doc.add(servField);

任何关于“如何实现重用文档和字段”的建议都将不胜感激

共有1个答案

瞿文柏
2023-03-14

您不需要在每次迭代时都将字段添加到文档中。您只需在循环中添加一次,并在循环中使用'Field.SetValue Writer.AddDocument'。就像这个:

Document doc = new Document();
Field field1 = new TextField("field1", field1Value, Field.Store.YES);
doc.add(field1);
Field field2 = new StringField("field2", field2Value,Field.Store.YES);
doc.add(field2);
while ((line = br.readLine()) != null) {
    field1.setStringValue("field1Value");
    field2.setStringValue("field2Value");

    writer.addDocument(doc);
}
 类似资料:
  • 我们使用Lucene4.7构建和查询一个相当大的数据集(1亿1千万以上的文档)。 详情: 硬件:Xen VM,8核至强CPU E5-2670 v2,2.5GHz,64 GB RAM 操作系统:Windows Server 2012标准 JVM:以-xmx8000m开始(Lucene使用了其中的45%) Lucene查询是单线程的

  • 编辑1:我也试过这个,但同样的问题。

  • 它对一些包含“-”的词有效,但不是对所有的词都有效,我不知道为什么它不起作用。 我正在搜索的字段是经过分析的,其中包含有“-”字符和没有“-”字符的单词版本。 我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer 如果我搜索没有“*”的“v-strom”,它可以工作,但如果我只搜索“v-str”,例如,我不会得到结果。(应该会有

  • 本文向大家介绍Lucene实现索引和查询的实例讲解,包括了Lucene实现索引和查询的实例讲解的使用技巧和注意事项,需要的朋友参考一下 0引言 随着万维网的发展和大数据时代的到来,每天都有大量的数字化信息在生产、存储、传递和转化,如何从大量的信息中以一定的方式找到满足自己需求的信息,使之有序化并加以利用成为一大难题。全文检索技术是现如今最普遍的信息查询应用,生活中利用搜索引擎,在博客论坛中查找信息

  • bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L