如果索引量很大Whoosh,我怎样才能有效地从中检索n
个随机文档?
只需将所有文档拉入内存并使用random.sample
...
random.sample(list(some_index.searcher().documents()), n)
但如果索引包含大量文档,那么这将是非常低效的(在内存使用和磁盘IO方面)。
答案 0 :(得分:0)
只需创建一个新的数字字段ID
,该字段应该是唯一的,最好是自动递增。飞快移动没有自动增加,你应该自己动手。
然后要获取随机列表,只需使用random.randint(1, MAX_ID)
生成随机整数列表,然后构建搜索查询"ID:2 or ID:16 or ID:43 or ..."
并使用它进行查询,您将获得所需的列表。
您可以在不知道最大限制或最小限制的情况下查询间隔。例如:
ID:[ 10 to ]
ID:[ to 10]
ID:[ 1 to 10]
ID:2
ID:2 | ID:3
答案 1 :(得分:0)
可能有更好的方法,但在类似情况下对我有用的是在索引时为每个文档分配一个随机数。每个文档都会获得一个名为rand_id
的字段,其中包含一个随机数。然后,您可以在搜索时生成另一个随机数x
并搜索rand_id > x
。然后,您可以将搜索范围限制为n
个项目。如果搜索没有产生足够的结果,请再次搜索rand_id < x
并完成剩下的工作。