Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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
Java Lucene性能:从Searcher检索所有文档_Java_Performance_Lucene - Fatal编程技术网

Java Lucene性能:从Searcher检索所有文档

Java Lucene性能:从Searcher检索所有文档,java,performance,lucene,Java,Performance,Lucene,我使用NIOFSDirectory索引了大约1000万个对象 当我使用MatchAllDocsQuery检索文档时,性能明显低于其他类型的查询,例如BooleanQuery。我做了一些测试,性能差了大约100倍 因为我只对前n个文档感兴趣,有没有一种方法可以从Searcher对象中检索它们而不使用MatchAllDocsQuery 我也在考虑对对象的随机属性使用WildcardQuery,但Lucene在行动中声称与WildcardQuery相关的“性能下降” 非常感谢您的建议 正如Yuval在

我使用NIOFSDirectory索引了大约1000万个对象

当我使用MatchAllDocsQuery检索文档时,性能明显低于其他类型的查询,例如BooleanQuery。我做了一些测试,性能差了大约100倍

因为我只对前n个文档感兴趣,有没有一种方法可以从Searcher对象中检索它们而不使用MatchAllDocsQuery

我也在考虑对对象的随机属性使用WildcardQuery,但Lucene在行动中声称与WildcardQuery相关的“性能下降”


非常感谢您的建议

正如Yuval在评论中指出的,您尚未指定获取顶级文档的标准。如果您打算检索随机文档,您可以简单地使用,而无需进行任何搜索。如果您有一些条件,可以使用TermQuery(或QueryParser返回的查询)。

正如Yuval在评论中指出的,您没有指定获取顶级文档的条件。如果您打算检索随机文档,您可以简单地使用,而无需进行任何搜索。如果您有一些条件,您可以使用TermQuery(或QueryParser返回的查询)。

根据什么列出前n个文档?如果您只是想要一个随机样本,我会使用另一个take(可能是数据库),或者在每个文档中添加一个数字标识符,在lucene之外进行随机选择,然后使用术语查询。你还有其他限制吗?因为这似乎有点不对劲。你能发代码吗?是searcher.search()方法花费了100倍的时间吗?我使用MatchAllDocsQuery没有任何明显的性能问题。谢谢大家的评论。下面是一个场景。我有一千万个Foo类的对象,其中95%在字段栏上有相同的值(比如Bar=1)。由于出现频率的原因,在10MM对象上查找“条:1”的速度非常慢。因此,我根据Bar的值对索引进行了分区,并从索引中删除了Bar字段。现在,当我想要“Bar:2”时,我只需要将所有(或任何)对象放在正确的分区中。这基本上就是MatchAllDocsQuery的设计目的,只是它的性能不可接受。我运行的测试用例涉及BooleanQuery和MatchAllDocsQuery。MatchAllDocsQuery的性能要差得多。除非索引了10毫米以上的文档,否则它不会立即被注意到。根据什么排名前n名的文档?如果您只是想要一个随机样本,我会使用另一个take(可能是数据库),或者在每个文档中添加一个数字标识符,在lucene之外进行随机选择,然后使用术语查询。你还有其他限制吗?因为这似乎有点不对劲。你能发代码吗?是searcher.search()方法花费了100倍的时间吗?我使用MatchAllDocsQuery没有任何明显的性能问题。谢谢大家的评论。下面是一个场景。我有一千万个Foo类的对象,其中95%在字段栏上有相同的值(比如Bar=1)。由于出现频率的原因,在10MM对象上查找“条:1”的速度非常慢。因此,我根据Bar的值对索引进行了分区,并从索引中删除了Bar字段。现在,当我想要“Bar:2”时,我只需要将所有(或任何)对象放在正确的分区中。这基本上就是MatchAllDocsQuery的设计目的,只是它的性能不可接受。我运行的测试用例涉及BooleanQuery和MatchAllDocsQuery。MatchAllDocsQuery的性能要差得多。除非你有10毫米以上的文档索引,否则它不会立即被注意到。谢谢你的回答。我不得不与搜索者合作,因为可能会有我需要搜索者的情况。例如,如果输入查询是“foo:1,bar:2”,我需要在我的一个分区上执行“foo:1”搜索(请阅读上面的注释)。我目前正在玩弄searcher.doc(I)方法。可能正在工作…我建议您预先处理您的查询。搜索bar的值似乎对您毫无帮助。因此,从初始查询开始。根据bar的值选择索引(仍然不使用lucene)。然后,如果还有剩余的查询,则执行查询的其余部分。例如,如果输入查询为“foo:1,bar:2”,则选择第二个索引并发出查询“foo:1”。如果只是“bar:2”,从第二个索引中随机获取一个文档,可能正如Shashikant Kore所建议的那样。谢谢你的回答。我不得不与搜索者合作,因为可能会有我需要搜索者的情况。例如,如果输入查询是“foo:1,bar:2”,我需要在我的一个分区上执行“foo:1”搜索(请阅读上面的注释)。我目前正在玩弄searcher.doc(I)方法。可能正在工作…我建议您预先处理您的查询。搜索bar的值似乎对您毫无帮助。因此,从初始查询开始。根据bar的值选择索引(仍然不使用lucene)。然后,如果还有剩余的查询,则执行查询的其余部分。例如,如果输入查询为“foo:1,bar:2”,则选择第二个索引并发出查询“foo:1”。如果只是“bar:2”,则从第二个索引中随机获取一个文档,可能正如Shashikant Kore所建议的那样。