Search Manual / Version 2107
Table Of ContentsWhen computing the data for a feedable, dependencies on accessed objects are tracked and recorded by the CAE Feeder. Modifications of recorded dependencies will lead to the invalidation of the feedable. The CAE Feeder will then construct a new feedable with recomputed data and send it to the search engine. For example, a content bean will be reindexed after changing some content that was used to compute the feedable for that content bean.
In some cases, however, the invalidation of a dependency does not necessarily lead to a different value for feeding and the overhead of reindexing could be avoided for better performance.
For example, an indexed bean property gets its data from a content with global settings.
Such a content may contain lots of different settings in different properties or in a
single struct property. Imagine, that a single setting S1
from this content is accessed during the construction of each indexed feedable. Because of
this, each indexed bean will depend on the properties of the settings content. Now, if
somebody changes the content, for example by changing setting
S2
, all indexed beans will be invalidated and reindexed.
This can take some time. And the data did not even change.
Of course, you want to avoid such situations. One possibility is to disable such
expensive dependencies by wrapping the code that creates them with the methods
disableDependencies()
and enableDependencies()
of the class
com.coremedia.cache.Cache.
But often this is not possible, because sometimes an invalid dependency really indicates
changed data and the index must be updated. To solve this problem, the
CAE Feeder supports fragment keys, which can be
used to revalidate an unchanged result of a computation after some of its dependencies
became invalid. Revalidation means that the CAE Feeder recognizes
that an invalidation of a dependency does not change the result so that expensive reindexing
can be skipped.
Caution
Revalidating fragment keys should be used when it's possible to encapsulate a fragment that is used for the computation of many feedables, and if dependencies get invalidated without changing the feedable's data.
You should not use fragment keys, if each fragment is used in just one feedable instance. The overhead of maintaining a lot of fragment keys in the CAE Feeder can be much higher than reindexing a few content beans. The number of fragment keys should be lower than the number of indexed content beans, for which the fragment keys are used.
This section continues with an example how to use revalidating fragments to avoid unnecessary reindexing.