Hi,
Caveat : I know nothing about Oracle text.
We have in all our praxis found only one use case for (regular) index rebuilt, when we implemented our own AQ framework. Now we have an enhancements request pending that would make even that unnecessary.
But Oracle itself seems to not be averse to some optimizing on text indexes (OPTIMIZE_INDEX) :
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ccref/CTX_DDL-package.html#GUID-28E079B1-D5CA-4264-B1C0-A1C5CE174C55 At a rate of once a month or so. Or selectively on frequently searched tokens if those querys show unacceptable slowdown, not pro-actively.
https://stackoverflow.com/questions/1916244/how-to-sync-and-optimize-an-oracle-text-index Here someone mentions :
Putting this here as an update for Oracle 12C users. If you use the index in real time mode, then it keeps items in memory, and periodicially pushes to the main tables, which keeps fragmentation down and enables NRT search on streaming content. Here's how to set it up
exec ctx_ddl.drop_preference ( 'your_tablespace' );
exec ctx_ddl.create_preference( 'your_tablespace', 'BASIC_STORAGE' );
exec ctx_ddl.set_attribute ( 'your_tablespace', 'STAGE_ITAB', 'true' );
create index some_text_idx on your_table(text_col) indextype is ctxsys.context PARAMETERS ('storage your_tablespace sync (on commit)')
this will set up the index in NRT mode. It's pretty sweet.
Don't know about the streaming part, but keeping the index fragmentation low sounds good. Don't know if this results in a broken index if the database crashes before flushing though. If so you'll have to (online) rebuild it.
regards,