问题标签 [ramdirectory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1879 浏览

c# - 如何将 Lucene.Net RAMDirectory 写回磁盘?

我一直在使用 Lucene.Net 并且已经有FSDirectory一段时间了,所以我熟悉使用它的基础知识。但是,我现在正尝试RAMDirectory在可能的情况下通过使用 's 来重写一些关键代码,以加快索引的使用。

将现有的 FSDirectory 加载到 RAMDirectory 中很容易,只需使用适当的构造函数即可。但是,我似乎无法弄清楚如何再次将其写回磁盘。

我在 Java 版本中看到过一些提及静态 Directory.copy() 方法,但这在 Lucene.Net 中似乎不存在。

这可能吗?

更新:原来我使用的是旧版本的 Lucene.Net,它不支持这种方法。Lucene.Net 官方网站上的“官方二进制文件”显然已经过时了。感谢 CVertex 建议使用NuGet在 Visual Studio 中下载和安装最新版本的 Lucene。

0 投票
1 回答
4731 浏览

unit-testing - 模拟和单元测试 Solr 和 Lucene 索引

我们需要控制生产 solr 索引中的数据,并且需要它与新开发兼容。理想情况下,我们想在本地机器上模拟索引,用它查询 solr 并编写单元测试来查询它以获得更快的迭代。

RamDirectory 在另一个问题中用于做类似的事情,但问题是从 2 年前开始的。这个例子似乎就是这样做的(使用 FSDirectory 而不是 RamDirectory)。这些是解决这个问题的正确方法吗?有没有更好的方法来做到这一点?

我们想编写如下测试:

编辑:附加细节:

我们的想法是我们会建立一个索引,有一种简单的方法来添加文档,而不需要索引器和系统的其余部分,除了我们可以保留在版本控制中的本地数据库。过去我们生成一个索引,当出现不兼容时,我们重新生成它。

如果我们重新索引,我们会增加很多开销,并且模拟索引器似乎不是一个好的选择,因为我们的索引器包含大量数据处理逻辑(比如将数据添加到数据库中的可搜索字段) . 我们的索引器连接到外部数据库,因此我们也需要支持它。我们可以有一个如上所述的本地测试数据库,它几乎没有开销。

一旦我们有一个测试数据库,我们需要建立一个索引,然后我们可以离开上面的第二个链接。问题变成了我们如何真正快速地构建索引以进行测试,比如 1000 个文档。

这样做的问题是,我们需要让我们的本地数据库模式与生产模式保持同步。生产模式经常变化,这是一个问题。我们希望有一个足够灵活的测试基础设施来处理这个问题——目前的方法是每次都重建数据库,这很慢而且会惹恼其他人!

0 投票
0 回答
152 浏览

indexing - 使用 RamDirectory 时 MergePolicy 的效果

我们有一个作业(定期运行)索引上次运行后更新的文档。我们首先写入 RamDirectory,然后将其与磁盘上的索引合并(使用 indexWriter.addIndexes())。我们应该为两个作者设置 MergePolicy 吗?在写入 RamDirectory 并与磁盘上的索引合并时

谢谢

0 投票
1 回答
957 浏览

c# - 如果对象大小超过 2GB,如何使用 RAMDirectory 并避免 OutOfMemoryException

我一直将我的整个索引放入内存中RAMDirectory以提高性能,并且它运行良好,直到我的索引不断增长。现在我得到了OutOfMemoryException。虽然我在磁盘上的索引为 1.24GB,但我怀疑对象的对象大小RAMDirectory最终超过了 .NET 2GB 对象大小限制,因此引发了异常。另一个原因可能是虚拟地址空间太碎片化,无法为我的对象找到足够大的洞。

我很想继续使用RAMDirectory. 我怎么能在避免的同时做到这一点OutOfMemoryException

另请注意,当我编写索引时,我会调用IndexWriter.Optimize,因此整个索引都在一个大文件中。

0 投票
1 回答
902 浏览

google-app-engine - indexwriter.close 中的空指针异常(在谷歌应用引擎中使用 ramdirectory)

我正在努力让 lucene 索引在 Google App Engine 上工作。我正在使用 ramdirectory 创建索引,然后将其(ramdirectory 对象)序列化到 memcache 和 blobstore 以进行持久存储。 http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore 对于搜索,我只是反序列化它并在搜索中使用。

关闭索引器时,我面临空指针异常。

我认为这可能与谷歌应用引擎仅支持以下库有关。 http://code.google.com/appengine/docs/java/jrewhitelist.html

我正在使用 lucene 3.5.0 和应用引擎 java 版本 1.6.1

以下是我得到的堆栈跟踪

该代码在我的本地机器上正常工作(我没有添加太多代码,只是添加了一些示例文档并做了一个 indexwriter.close())

以前有人遇到过这个问题吗??如果是这样,是否有解决方法?

我发现问题的代码很简单

当我试图在最后一行关闭作者时抛出异常

0 投票
1 回答
697 浏览

java - RAM 目录 Lucene

我正在尝试索引文本文件并使用 RAMDirectory 进行快速索引,并且想知道是否有办法清除以前的 RAMDirectory 以防止重复?

0 投票
0 回答
173 浏览

database - 在 db 中存储 lucene 索引(无 JDBCDirectory,无文件系统)

有没有什么好方法可以在没有任何外部库的情况下将 lucene 索引存储在 db 中,它触及连接层(如 JDBCDirectory),也无需使用文件系统(甚至是临时的)。如果我可以从中获取索引的特定部分 - .cfs“文件”和段,RAMDirectory 对我来说会很好。不知道是否可行。将感谢任何帮助。

0 投票
1 回答
354 浏览

java - Lucene 从 RAMDirectory 更改为 FSDIrectory - 缺少内容字段

我只是一个 lucene 入门者,在从 RAMDIrectory 更改为 FSDirectory 的过程中遇到了一个问题:

首先我的代码:

这只是我在一个很棒的网站上找到的一些代码,我想尝试一下....使用 RAMDirectory 一切都很好。但是,如果我将其更改为我的 FSDirectory,它会给我一个 NullpointerException,例如:

在 com.org.test.TextDB.myMethod(TextDB.java:184) 在 com.org.test.Main.main(Main.java:31) 的线程“main”java.lang.NullPointerException 中的异常

语句条款内容 = reader.getTermVector(spans.doc(), "content"); 似乎没有结果并返回null。所以例外。但为什么?在我的 ramDIR 中一切正常。

似乎 indexWriter 或 Reader(真的不知道)没有从索引中正确写入或读取字段“内容”。但我真的不知道为什么它“写”在 RAMDirectory 中而不是写在 FSDIrectory 中?!

有人对此有想法吗?

0 投票
1 回答
305 浏览

java - Lucene BooleanQuery 错误结果

我创建了一个 Lucene RAMDirectory 来收集来自不同来源的数据并使它们可以快速搜索。我花了很多时间来了解不同的分析器和索引策略,但在某些情况下查询结果不是预期的。

这是一个演示类:

如果我搜索“ox”、“gray fox”或“-(frankenstein)”,代码运行良好。但我没有“DR-(弗兰肯斯坦)”的结果。我不知道我做错了什么。所以欢迎任何建议。

0 投票
1 回答
64 浏览

lucene - lucene RAMDirectory 基准测试在哪里以及如何进行基准测试

我希望有人能指出如何对我的 lucense RAMDirectory 索引进行基准测试?

我有大约 300-500K 文档索引(每个文档少于 80 个字符),我想测试内存 RAMDirectory 的速度。

在非常高的层次上,这应该是每秒几十个还是几百个查询?