# Indexing data source (IRPCIndexingDataSource)

Location: [gRPC API](https://developer.m-files.com/APIs/gRPC-API/index.md) > [Server integration API](https://developer.m-files.com/APIs/gRPC-API/integration/index.md)

HTML version: https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/

An interface for retrieving data for indexing.

This interface provides methods for retrieving the information of objects and files that
must be indexed based on a logical timestamp. Methods for getting the data of objects for
metadata indexing and file contents for file data indexing are also provided.

- **gRPC service:** `MFiles.IRPCIndexingDataSource`
- **Book and level:** [Server integration API](https://developer.m-files.com/APIs/gRPC-API/integration/index.md), specialized
- **Methods:** 21
- **Proto file:** [`mfiles/IRPCIndexingDataSource.proto`](https://developer.m-files.com/APIs/gRPC-API/downloads/proto/mfiles/IRPCIndexingDataSource.proto)

<a id="overview"></a>

## Overview

**For M-Files components only.** Search indexers use this service to crawl the vault: they ask
which objects and files have changed since their last position and fetch the data to index.
Applications should not call it; to search, use [IRPCSearch](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCSearch/index.md).

- **Callers:** the M-Files indexing service (the indexer process that M-Files Server runs for the
  vault's search indexes) uses all methods. M-Files' cloud search indexing services use the
  combined enumerator ([GetNextObjectsForIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetNextObjectsForIX/index.md)
  and its companions) together with
  [IRPCIndexingDataSource2](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource2/index.md).
- **Authentication:** the M-Files indexing service logs in to the vault with Windows
  authentication as an internal process of M-Files Server, under the server's own service
  account, and so has the system administrator server role.
- **Rights, data methods** (enumerators, `HasMore...`, `GetSmallestTimestamp...`, downloads and
  file caching): a vault session with the vault rights `see_all_objects` and
  `see_deleted_objects`; no server role is needed. The data is returned regardless of object
  permissions, with the objects' permissions included for the index.
- **Rights, configuration methods** (`GetFullTextSearchLanguage`, `GetObjectTypesWithPropertyDefs`,
  `GetEnabledIndexes`, `ConvertDestructionTimestampToLogical`, `GetFacetSources`,
  `GetIndexingOptions`, `GetVaultTempFilePath`, `NotifyObjectSkippedIndexing`): the system
  administrator server role (server right `log_in_to_any_vault`). A vault administrator without it
  gets "You do not have the server-level access rights required by this operation." (codes
  0x800400A8 and 0x800407E4).
- **Crawl model:** every enumerator call carries an [IndexingRequest](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.IndexingRequest/index.md)
  that names the index and the caller's last indexed position as a
  [LogicalTimestamp](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.LogicalTimestamp/index.md). The `...ForIX` methods serve a combined
  index of metadata and file content; the `...ForMIX` and `...ForFIX` methods serve separate
  metadata and file data indexes. `HasMore...` checks whether there is work,
  `GetNext...` returns a batch and the new position, and `GetSmallestTimestamp...` maps a
  Change Tracking version to a logical timestamp.

<a id="methods"></a>

## Methods

| Method | Summary | Facts |
|---|---|---|
| [CacheFileForIndexing](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/CacheFileForIndexing/index.md) | Writes a file version, in the requested format, to a temporary folder on the server computer and returns its local path. | `internal: not for applications` `write` `session` |
| [CacheFileForIndexingCollective](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/CacheFileForIndexingCollective/index.md) | Like CacheFileForIndexing, for up to 20 file versions in one call, processed in parallel. | `internal: not for applications` `write` `session` |
| [ConvertDestructionTimestampToLogical](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/ConvertDestructionTimestampToLogical/index.md) | Converts a destruction time (a Windows FILETIME value) to the vault's logical destruction timestamp. | `internal: not for applications` `write` `session` |
| [DownloadFile_BeginForFIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/DownloadFile_BeginForFIX/index.md) | Begins downloading a file for file data indexing. | `internal: not for applications` `write` `session` |
| [DownloadFile_EndForFIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/DownloadFile_EndForFIX/index.md) | Ends downloading a file for file data indexing. | `internal: not for applications` `write` `session` |
| [DownloadFile_ReadBlockForFIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/DownloadFile_ReadBlockForFIX/index.md) | Gets a specific block from a file from the server for file data indexing. | `internal: not for applications` `write` `session` |
| [GetEnabledIndexes](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetEnabledIndexes/index.md) | Gets the names of the enabled indexes. | `internal: not for applications` `write` `session` |
| [GetFacetSources](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetFacetSources/index.md) | Gets the facet definitions configured for the vault, as JSON. | `internal: not for applications` `write` `session` |
| [GetFullTextSearchLanguage](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetFullTextSearchLanguage/index.md) | Gets the full-text search languages of the vault. | `internal: not for applications` `write` `session` |
| [GetIndexingOptions](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetIndexingOptions/index.md) | Gets the indexing options of one index, or of all indexes, as JSON. | `internal: not for applications` `write` `session` |
| [GetNextFilesForFIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetNextFilesForFIX/index.md) | Gets next object files for file data indexing. | `internal: not for applications` `write` `session` |
| [GetNextObjectsForIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetNextObjectsForIX/index.md) | Gets next objects and their data for indexing. | `internal: not for applications` `write` `session` |
| [GetNextObjectsForMIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetNextObjectsForMIX/index.md) | Gets next objects and their data for metadata indexing. | `internal: not for applications` `write` `session` |
| [GetObjectTypesWithPropertyDefs](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetObjectTypesWithPropertyDefs/index.md) | Gets object types with associated property defs. | `internal: not for applications` `write` `session` |
| [GetSmallestTimestampForFiledataIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetSmallestTimestampForFiledataIX/index.md) | Gets the smallest timestamp of a file that has been modified since specific Change Tracking version. Returns also the current Change Tracking version. | `internal: not for applications` `write` `session` |
| [GetSmallestTimestampForMetadataIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetSmallestTimestampForMetadataIX/index.md) | Gets the smallest timestamp of an object that has been modified since specific Change Tracking version. Returns also the current Change Tracking version. | `internal: not for applications` `write` `session` |
| [GetVaultTempFilePath](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/GetVaultTempFilePath/index.md) | Gets the local path of the vault's temporary file folder on the server computer. | `internal: not for applications` `write` `session` |
| [HasMoreObjectsForFiledataIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/HasMoreObjectsForFiledataIX/index.md) | Checks whether object files are waiting for a file data index, and optionally how many. | `internal: not for applications` `write` `session` |
| [HasMoreObjectsForIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/HasMoreObjectsForIX/index.md) | Checks whether objects are waiting for a combined index, and optionally how many. | `internal: not for applications` `write` `session` |
| [HasMoreObjectsForMetadataIX](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/HasMoreObjectsForMetadataIX/index.md) | Checks whether objects are waiting for a metadata index, and optionally how many. | `internal: not for applications` `write` `session` |
| [NotifyObjectSkippedIndexing](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCIndexingDataSource/NotifyObjectSkippedIndexing/index.md) | Reports objects or files that an indexer skipped, and why. | `internal: not for applications` `write` `session` |
