Thanks Andreas, that helps a bit. I am still not sure why a Lexicon has its own word list when (I assume) a index also has a "word -> result" hashmap / dictionary of some kind. Why store the words twice? But maybe that is an implementation detail I could ignore.
And yes, I know of TextIndexNG3, I read your eol announcement ( TextIndexNG3 end of lifetime announcement ).
The application I have to maintain has almost 900 instances of TextIndexNG3 and replacing them brings me quite a big step further to reach my goal, ie update the Zope app to Python 3.
Due to time constraints I still think replacing TextIndexNG3 with ZC.TextIndex is the best way to go for now.
When I have a look at the code which generated the TextIndexNG3 instances, it looks like not much of its features were actually activated - so my best guess is my users won't notice the replaced indexer at all (fingers crossed).
(The first three config options were based on meta class info, the rest were the same for each attribute)
addChars = self.attributeTag(klass, attr, 'txng3_splitter_additional_chars')
useNormalizer = self.attributeTag(klass, attr, 'txng3_use_normalizer')
autoExpand = self.attributeTag(klass, attr, 'txng3_autoexpand')
catalog_record = CatalogRecord(