Python 从Whoosh索引中高效地获取n个随机文档

Python 从Whoosh索引中高效地获取n个随机文档,python,whoosh,Python,Whoosh,给定一个大索引,如何有效地从中检索n随机文档 我可以通过将所有文档放入内存并使用 但是如果索引包含大量文档,那么效率将非常低(在内存使用和磁盘IO方面)。只需创建一个新的数字字段ID,该字段应该是唯一的,最好是自动递增的。嗖嗖声没有自动递增,你应该自己做 然后,要获得随机列表,只需使用random.randint(1,MAX_ID)生成一个随机整数列表,然后构建一个搜索查询“ID:2或ID:16或ID:43或…”,并将其用于查询,您将获得所需的列表 您可以在不知道最大限制或最小限制的情况下查询间

给定一个大索引,如何有效地从中检索
n
随机文档

我可以通过将所有文档放入内存并使用


但是如果索引包含大量文档,那么效率将非常低(在内存使用和磁盘IO方面)。

只需创建一个新的数字字段
ID
,该字段应该是唯一的,最好是自动递增的。嗖嗖声没有自动递增,你应该自己做

然后,要获得随机列表,只需使用
random.randint(1,MAX_ID)
生成一个随机整数列表,然后构建一个搜索查询
“ID:2或ID:16或ID:43或…”
,并将其用于查询,您将获得所需的列表

您可以在不知道最大限制或最小限制的情况下查询间隔。例如:

  • ID:[10到]
  • ID:[至10]
  • ID:[1到10]
  • ID:2
  • ID:2 | ID:3

只需创建一个新的数字字段
ID
,它应该是唯一的,最好是自动递增的。嗖嗖声没有自动递增,你应该自己做

然后,要获得随机列表,只需使用
random.randint(1,MAX_ID)
生成一个随机整数列表,然后构建一个搜索查询
“ID:2或ID:16或ID:43或…”
,并将其用于查询,您将获得所需的列表

您可以在不知道最大限制或最小限制的情况下查询间隔。例如:

  • ID:[10到]
  • ID:[至10]
  • ID:[1到10]
  • ID:2
  • ID:2 | ID:3

可能有更好的方法,但在类似情况下,对我有效的方法是在索引时为每个文档分配一个随机数。每个文档都会获得一个名为
rand\u id
的字段,其中包含一个随机数。然后,您可以在搜索时生成另一个随机数
x
,并搜索
rand\u id>x
。然后,您可以将搜索限制为
n
项。如果搜索结果不够多,请再次搜索
rand\u id
,然后再搜索其他内容。

可能有更好的方法,但在类似情况下,对我有效的方法是在索引时为每个文档分配一个随机数。每个文档都会获得一个名为
rand\u id
的字段,其中包含一个随机数。然后,您可以在搜索时生成另一个随机数
x
,并搜索
rand\u id>x
。然后,您可以将搜索限制为
n
项。如果搜索没有得到足够的结果,请再次搜索
rand\u id
并获取其余结果。

Hmm。。。Whoosh具有自动递增的ID,并且能够查询ID属性的最大值?我对呼呼声不太熟悉,但我从来没有遇到过这样的特征;我在谷歌上找不到任何关于
whoosh autoincrement
的东西,也没有在文档中看到类似
Max()
类的东西。你能给这个答案添加更多的细节或链接吗?Whoosh没有自动递增功能,你应该自己做。是的,您可以在不知道最大限制或最小限制的情况下查询某些内容。例如:
ID:[10到]
ID:[10]
ID:[1到10]
ID:2
或'ID:2 | ID:3'嗯。。。Whoosh具有自动递增的ID,并且能够查询ID属性的最大值?我对呼呼声不太熟悉,但我从来没有遇到过这样的特征;我在谷歌上找不到任何关于
whoosh autoincrement
的东西,也没有在文档中看到类似
Max()
类的东西。你能给这个答案添加更多的细节或链接吗?Whoosh没有自动递增功能,你应该自己做。是的,您可以在不知道最大限制或最小限制的情况下查询某些内容。例如:
ID:[10到]
ID:[10]
ID:[1到10]
ID:2
或'ID:2 | ID:3'
random.sample(list(some_index.searcher().documents()), n)