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