-
lance.LanceDataset.scanner(columns: list[str] | dict[str, str] | None =
None, filter: str | 表达式 | None =None, limit: int | None =None, offset: int | None =None, nearest: dict | None =None, batch_size: int | None =None, batch_readahead: int | None =None, fragment_readahead: int | None =None, scan_in_order: bool | None =None, 片段: Iterable[LanceFragment] | None =None, full_text_query: str | dict | FullTextQuery | None =None, *, prefilter: bool | None =None, with_row_id: bool | None =None, with_row_address: bool | None =None, use_stats: bool | None =None, fast_search: bool | None =None, io_buffer_size: int | None =None, late_materialization: bool | list[str] | None =None, use_scalar_index: bool | None =None, include_deleted_rows: bool | None =None, scan_stats_callback: Callable[[ScanStatistics], None] | None =None, strict_batch_size: bool | None =None) LanceScanner 返回一个支持各种下推操作的Scanner。
- Parameters:
- columns : list of str, or dict of str to str default None¶
要获取的列名列表。 或者列名到SQL表达式的字典。 如果为None或未指定,则获取所有列。
- filter : pa.compute.Expression or str¶
表达式或字符串,必须是一个有效的SQL where子句。有关有效的SQL表达式,请参阅 Lance filter pushdown 。
- limit : int, default None¶
最多获取这么多行。如果为None或未指定,则获取所有行。
- offset : int, default None¶
从这一行开始获取。如果未指定则为0。
- nearest : dict, default None¶
获取与K个最相似向量对应的行。示例:
{ "column": <embedding col name>, "q": <query vector as pa.Float32Array>, "k": 10, "minimum_nprobes": 20, "maximum_nprobes": 50, "refine_factor": 1 }- batch_size : int, default None¶
返回批次的目标大小。在某些情况下,批次大小可能达到此值的两倍(但绝不会超过)。而在其他情况下,批次大小可能小于此值。
- io_buffer_size : int, default None¶
IO缓冲区的大小。有关更多信息,请参阅
ScannerBuilder.io_buffer_size。- batch_readahead : int, optional¶
预读取的批次数量。
- fragment_readahead : int, optional¶
预读取的片段数量。
- scan_in_order : bool, default True¶
是否按顺序读取片段和批次。如果为false,吞吐量可能会更高,但批次将无序返回,内存使用可能会增加。
- fragments : iterable of LanceFragment, default None¶
如果指定,则仅扫描这些片段。如果scan_in_order为True,那么片段将按照给定的顺序进行扫描。
- prefilter : bool, default False¶
如果为True,则在运行向量查询之前应用过滤器。 这将生成更准确的结果,但查询成本可能更高。 通常在过滤器具有高选择性时效果良好。
如果为False,则在运行向量查询之后应用过滤器。 这样性能会更好,但如果最接近查询的行不匹配过滤器, 结果可能会少于请求的行数(或为空)。 通常在过滤器选择性不高时效果良好。
- use_scalar_index : bool, default True¶
Lance会自动使用标量索引来优化查询。在某些极端情况下,这可能会使查询性能变差,此时可以通过该参数禁用标量索引。
- late_materialization : bool or List[str], default None¶
允许自定义控制延迟物化。延迟物化会在过滤操作后通过take操作获取非查询列,这在结果较少或列数据量非常大时非常有用。
当结果较多或列数据非常窄时,早期物化可能更优。
如果设为True,则所有列都采用延迟物化; 如果设为False,则所有列都采用早期物化; 如果是字符串列表,则只有列表中的列会延迟物化。
默认采用启发式算法,假设过滤器会筛选出约0.1%的行。如果您的过滤器选择性更强(例如按id查找),可能需要设为True;如果过滤器选择性较弱(例如匹配20%的行),可能需要设为False。
- full_text_query : str or dict, optional¶
要搜索的查询字符串,结果将按BM25算法排序。 例如"hello world"会匹配包含"hello"或"world"的文档。 或者使用包含以下键的字典:
- columns: list[str]
要搜索的列, 目前columns列表中仅支持单个列。
- query: str
要搜索的查询字符串。
- fast_search : bool, default False¶
如果为True,则搜索将仅在索引数据上执行,这样可以缩短搜索时间。
- scan_stats_callback : Callable[[ScanStatistics], None], default None¶
一个回调函数,在扫描完成后将调用该函数并传入扫描统计信息。回调函数引发的错误将被记录但不会重新抛出。
- include_deleted_rows : bool, default False¶
如果为True,则已被删除但仍存在于片段中的行将被返回。这些行的_rowid列将被设为null。所有其他列将反映磁盘上存储的值,可能不为null。
注意:如果是搜索操作或take操作(包括标量索引扫描),则无法返回已删除的行。
注意
目前,如果同时指定了filter和nearest,那么:
nearest 会优先执行。
结果会在之后进行过滤。
为了调试近似最近邻(ANN)结果,您可以选择即使存在索引也不使用它,只需指定
use_index=False。例如,以下代码将始终返回精确的KNN结果:dataset.to_table(nearest={ "column": "vector", "k": 10, "q": <query vector>, "use_index": False }