Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Lucene中有更多的小记录还是更少的大记录更好?_C#_Lucene_Lucene.net - Fatal编程技术网

C# 在Lucene中有更多的小记录还是更少的大记录更好?

C# 在Lucene中有更多的小记录还是更少的大记录更好?,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我正在为我使用Lucene.net开发的应用程序编制大量日志文件的索引。现在,我正在分析每个条目的日志文件(即,一个条目可以跨越多行,直到下一个日志条目),并将每个日志条目作为文档添加到Lucene中 每个文档都包含日志条目(已分析)和一些其他字段(仅存储),例如日志行时间、日志行号以及它来自的日志类型。我还为每个日志条目文档提供了一个guid,以将日志条目序列映射回原始源文档,并可以按行号重新排序 虽然我喜欢能够搜索索引中每行条目的粒度(我可以通过隐藏分配给每个日志文件的guid来重建原始文档

我正在为我使用Lucene.net开发的应用程序编制大量日志文件的索引。现在,我正在分析每个条目的日志文件(即,一个条目可以跨越多行,直到下一个日志条目),并将每个日志条目作为文档添加到Lucene中

每个文档都包含日志条目(已分析)和一些其他字段(仅存储),例如日志行时间、日志行号以及它来自的日志类型。我还为每个日志条目文档提供了一个guid,以将日志条目序列映射回原始源文档,并可以按行号重新排序

虽然我喜欢能够搜索索引中每行条目的粒度(我可以通过隐藏分配给每个日志文件的guid来重建原始文档),但我很好奇这种索引创建是否可持续。事实上,我已经有了大约2500万条记录,它们代表了仅仅一年的日志。我的搜索速度仍然很快,我可以在一两秒钟内搜索这2500万条记录


文档越少越好,但每个文档越大?这有关系吗?当我有5000万个条目时,我会遇到Lucene的性能瓶颈吗?一亿?五亿?如果我只为每个日志文件编制索引,如果我估计每个日志文件大约有1000-20000行,我可能会少3个数量级的文档。

所有这些建议是:性能几乎肯定不是您的主要问题。如果所需的功能对每行一个文档最有效,那么就这样做

话虽如此,Lucene的术语词典看起来像:

term1 -> doc1 doc4 doc32 ...
term2 -> doc1 doc3 doc8
因此,拥有更多文档将增加索引的大小

在得出这对性能不利的结论之前,请询问如果将整个文件作为一个文档编制索引,您将如何将每一行作为自己的搜索结果返回。你必须在搜索结果上实现一些二次搜索,这几乎肯定比Lucene做的要慢。那就让Lucene来处理吧


至于你关于Lucene可以扩展多高的问题:几年前提交了一个补丁,因为Lucene使用的32位IDs太小了。因此,有些人的索引包含超过22^32=42亿个文档

所有这些建议都是:性能几乎肯定不是你的主要问题。如果所需的功能对每行一个文档最有效,那么就这样做

话虽如此,Lucene的术语词典看起来像:

term1 -> doc1 doc4 doc32 ...
term2 -> doc1 doc3 doc8
因此,拥有更多文档将增加索引的大小

在得出这对性能不利的结论之前,请询问如果将整个文件作为一个文档编制索引,您将如何将每一行作为自己的搜索结果返回。你必须在搜索结果上实现一些二次搜索,这几乎肯定比Lucene做的要慢。那就让Lucene来处理吧


至于你关于Lucene可以扩展多高的问题:几年前提交了一个补丁,因为Lucene使用的32位IDs太小了。因此,有些人的索引包含超过22^32=42亿个文档

RavenDB在内部使用Lucene进行所有查询,性能测试表明,字段越多,索引越少,性能越好

有关一些实际数字,请参阅,例如:

  • 100个索引,每个索引具有一个属性:00:05:08
  • 1个索引,包含100个属性:00:02:01
这适用于25600个文档(每个文档都有100个用guid填充的字符串属性)


注意这些数字是针对RavenDB的,但它广泛使用Lucene,因此如果直接使用Lucene时有很大区别,我会感到惊讶

RavenDB在内部使用Lucene进行所有查询,性能测试表明,字段越多,索引越少,性能越好

有关一些实际数字,请参阅,例如:

  • 100个索引,每个索引具有一个属性:00:05:08
  • 1个索引,包含100个属性:00:02:01
这适用于25600个文档(每个文档都有100个用guid填充的字符串属性)

注意这些数字是针对RavenDB的,但它广泛使用Lucene,所以如果直接使用Lucene时有很大的不同,我会感到惊讶