After starting to make liberal use of nested properties to simulate (denormalized) many-to-many relations, our ES server started routinely throwing OutOfMemory errors several hours after startup under routine, moderate usages (both upserts and queries). Our app issues a fair number of nested filter queries, with inner term filters.
Trying to track down the root cause; wonder if bitsets of nested / term filters are being cached and never evicted, causing eventual OOM. With the above in mind a few questions:
can I print out bitset memory alloc by filter? (else - profiling time)
are cached filter bitsets ever evicted? on what basis?
No, the bitset filter cache caches bitsets per nested field. (only nested fields that have a parent nested field gets cached) The stats api just expose what the entire cache is taking.
If segments are removed by Lucene any cache entry associated with it is removed too. This also applies for the bitset filter cache. But other then that there is no other mechanism that purges the bitset filter cache.
But other then that there is no other mechanism that purges the bitset filter cache.
@mvg, thanks for your reply. However, this doc says (node) filter cache employs an LRU eviction policy, so does get purged, no? Or am I misunderstanding something?
Hi, Martin, I have interest about knowing what you've writed. That only nested fields that have a parent nested field gets cached. There's another source where I can find this information. I'm studying ElasticSerach on my master's degree and I think I will need another source for this information, different from this forum. Can you help me? I have looked at the ES definitive guide and I didnt find it there.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.