IndexTool.exe is a freely available Axiell command-line tool especially for quickly creating full text indexes and it does it substantially faster than Designer can, after you've set the Enable full text index option for all .inf's in your data folder and saved that setting. From the version of July 2023 (for Collections 1.17) it is able to create normal indexes too (for databases that haven't been Full Text-enabled), also faster than Designer can. Full text and non-full text indexes for metadata tables are supported from IndexTool version 7.13.1.6699 (and in Designer too). However, indexed links are not supported by the tool yet, so you should use Designer if this type of index appears in your application (too).
Preferably place the tool files in a separate folder near SQL Server but that is not required. If the operation of the tool is aborted mid-process, it can continue where it left off at a later time (when you restart it) because it stores a continuation file in the \data folder of the Collections application so the user must have write/create file access to this folder, or this part of the program will not work. The SQL user configured in the database .inf files must have access rights to create tables and install user defined SQL types.

For safety, create a backup of your database first. Then run the tool from a command-line window and specify any of the following options as its arguments (include the dashes).

--help

Show command line help

--version

Show IndexTool version number

-p or --data-path

Path to application \data folder. Use this option to specify the path to the Collections \data folder. The user running the tool should preferably have write access to this folder since the tool will attempt to create a file in this location (continuation.json).

-r or --reindex

Indexes all records in the database. This ignores any continuation information that might exist for this database. This option also skips rebuilding the SQL database schema for the indexes. Omit this option to resume an aborted indexing operation.

-x or --drop-index

Drops and recreates the full text index tables (in case the created indexes need to be redone for some reason). This flag instructs the tool to drop any existing full text indexes and recreate the full text index table for every database table that it is processing. Use this flag to start the indexing process from the very beginning with fresh and empty tables.
When reindexing a single field or just a few fields with a Text or Free text index definition (using the -d option with a tag list) for all records in the database, it is still recommended to use the -x option as well because all fields with index definitions of this type will be reindexed anyway (even if not specified in the tag list) and if all records need to be reindexed, dropping and recreating the full text index table(s) is usually faster than checking and updating the existing ones.

-l or --log-path

Enable and create log file at this path. Include the desired file name, something like mylog.txt for example. (If you specify the same file name repeatedly, then new log information will be added to the existing file.) By default (if you do not use the option), the tool will create a log file with a name formatted like indextool_<ISOdate>_<time>.log in the tool folder: it will also always print the log to the terminal window before it exits. Use the option to specify your own path and file name of the log file to which to log all tool events. You must have write/create access to that folder.
The tool reports index key data errors and any duplicate keys for unique indexes. Index key data errors are errors about data which does not match the index data type, such as dates in the wrong format, numericals with the wrong decimal character, etc.
If the log ends with something similar to the following (this was a very small test database with a lot of empty databases), the reindexing was successful:
 
2022-06-02 18:37:45.9958 | All indexing operations have concluded...

2022-06-02 18:37:46.0079 | Databases completed successfully: "collect,letters,people,settings,supplang,thesau"

2022-06-02 18:37:46.0079 | Databases skipped/empty: "auction,borrcat,borrower,budget,circuit,collname,conserva,copies,costs, currency,document,exhibit,fees,fines,littheme,loanhist,loans,location, media,orders,orditems,packgtyp,price,rameau,reprlang,reprordr,research, reserv,retention,sericopy,series,statics,stock,subscrip,taxonom,transpor"

2022-06-02 18:37:46.1743 | Wrote continuation list (42) to path "..\data\continuation.json"
 
You may delete that continuation.json file if the reindexing completed fully.

-d or --database

Whitespace separated list of one or more database tables. This option lets the user specify which database tables should be included in the indexing process. Typically you want all tables to be indexed and you specify that with an asterisk (*).
However, you can also specify the database tables to be processed as a whitespace separated list of database definition names without the .inf extension (e.g. collect people thesau). Special considerations should be taken for the asterix wildcard (*) which selects all database tables: when dash (-) is used at the end of a database table name it means that table is excluded. Database tables that do not have full text indexing enabled will be automatically excluded as well.
You can also specify tags and a priref range to index, using the following argument format (tags separated by commas):

--database <database name>:<tag_list>:<first_priref-last_priref>

-f or --fulltext

This option (available from 1.11.1) instructs the tool to only perform Full Text indexing.

--settings

This option (available from 1.11.1) will create a file called indextool.settings (a json file) where some internal values can be adjusted, buffers and such, the tool will pick up the file if it exists or use the defaults if the file doesn't exist. For advanced users only.

--log-debug

This option (available from 1.11.1) will make the tool log a bit more information than it does normally.

--log-trace

This option (not implemented yet, for future use), will eventually log details about every record.

-b or --bulk-mode

This option (available from 1.11.1) will attempt to set the SQL Server database recovery log option to BULK_LOGGED instead of FULL during indexing in order to minimize the SQL server database log file size.

--profile

You can create and load profiles. This stores the used command line options in a name file. So if you have a long command line and you know you're going to run it again in the future, you can add --profile <name> and it will be stored so you can run the indextool again with that profile name instead of specifying everything again.
The profile file will be saved in your local user folder (C:\Users\<user name)> with the subfolder path \AppData\Roaming\AxiellIndexTool\Profiles\<file_name>.json. You can load it again when running indextool by providing -profile <file_name> as the only command-line option behind indexTool.exe.

Examples:

indexTool.exe -p "..\data" -d *
-l "..\logs\indextoollog.txt"

Index all the database tables (this is also the default if -d is not specified) and create a log file. After running the tool, check in SQL Server Management Studio that each .inf now has a full text index table: these have names like dbo.collect_fulltext, dbo.thesau_fulltext, etc. If you already had the relevant database opened in SQL Server Management Studio, you may have to use the Refresh function in there to refresh the list of tables and see the new ones.

indextool.exe -p "..\data" -x -d * -l "..\logs\mylog.txt"

If due to errors not all of the full text indexes have been created, you can try again and add the -x option to drop the earlier created ones and recreate all full text indexes.

indexTool.exe -p "C:\Axiell\data" -d collect people

Index only collect and people.

indexTool.exe -p "C:\Axiell\data" --database event-

Index all database tables except for the event table.

Additional Information:

The tool will automatically shut down when all processing has completed, however the tool can be interrupted at any point and shut down using the F10 key. Ctrl+C will not work and has no effect. From version 1.11.1, the tool also writes a file called indextool_rejected_fields<date>.csv with all the values that failed validation during indexing.
The tool is a fully multi-threaded application and will utilize all available CPU cores, however the tool is not heavy on the CPU as most time is spent transferring data from and to the SQL server. The tool will index two databases concurrently and there is currently no way of specifying any advanced indexing settings.
The user interface is fully resizable, and the mouse cursor can be used to scroll the list of database tables during the reindexing process.