You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Darin Amos <da...@gmail.com> on 2014/12/06 02:14:25 UTC
DocsEnum and TermsEnum "reuse" in lucene join library?
Hi All,
I have been working on a custom query and I am going off of samples in the lucene join library (4.3.0) and I am a little unclear about a couple lines.
1) When getting a TermsEnum in TermsIncludingScoreQuery.createWeight(…).scorer()… A previous TermsEnum is used like the following:
segmentTermsEnum = terms.iterator(segmentTermsEnum);
2) When getting a DocsEnum SVInOrderScorer.fillDocsAndScores:
for (int i = 0; i < terms.size(); i++) {
if (termsEnum.seekExact(terms.get(ords[i], spare), true)) {
docsEnum = termsEnum.docs(acceptDocs, docsEnum, DocsEnum.FLAG_NONE);
My assumption is that the previous enum values are not reused, but this is a tuning mechanism for garbage collection, is the correct assumption?
Thanks!
Darin
Re: DocsEnum and TermsEnum "reuse" in lucene join library?
Posted by Michael McCandless <lu...@mikemccandless.com>.
They should be reused if the impl. allows for it.
Besides reducing GC cost, it can also be a sizable performance gain
since these enums can have quite a bit of state that otherwise must be
re-initialized.
If you really don't want to reuse them (force a new enum every time), pass null.
Mike McCandless
http://blog.mikemccandless.com
On Fri, Dec 5, 2014 at 8:14 PM, Darin Amos <da...@gmail.com> wrote:
> Hi All,
>
> I have been working on a custom query and I am going off of samples in the lucene join library (4.3.0) and I am a little unclear about a couple lines.
>
> 1) When getting a TermsEnum in TermsIncludingScoreQuery.createWeight(…).scorer()… A previous TermsEnum is used like the following:
>
> segmentTermsEnum = terms.iterator(segmentTermsEnum);
>
> 2) When getting a DocsEnum SVInOrderScorer.fillDocsAndScores:
>
> for (int i = 0; i < terms.size(); i++) {
> if (termsEnum.seekExact(terms.get(ords[i], spare), true)) {
> docsEnum = termsEnum.docs(acceptDocs, docsEnum, DocsEnum.FLAG_NONE);
>
> My assumption is that the previous enum values are not reused, but this is a tuning mechanism for garbage collection, is the correct assumption?
>
> Thanks!
>
> Darin