Solr
  1. Solr
  2. SOLR-5330

PerSegmentSingleValuedFaceting overwrites facet values

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 4.2.1
    • Fix Version/s: 4.5.1, 4.6, Trunk
    • Component/s: None
    • Labels:
      None

      Description

      I recently tried enabling facet.method=fcs for one of my indexes and found a significant performance improvement (with a large index, many facet values, and near-realtime updates). Unfortunately, the results were also wrong. Specifically, some facet values were being partially overwritten by other facet values. (That is, if I expected facet values like "abcdef" and "123", I would get a value like "123def".)

      Debugging through the code, it looks like the problem was in PerSegmentSingleValuedFaceting, specifically in the getFacetCounts method, when BytesRef val is shallow-copied from the temporary per-segment BytesRef. The byte array assigned to val is shared with the byte array for seg.tempBR, and is overwritten a few lines down by the call to seg.tenum.next().

      I managed to fix it locally by replacing the shallow copy with a deep copy.

      While I encountered this problem on Solr 4.2.1, I see that the code is identical in 4.5. Unless the behavior of TermsEnum.next() has changed, I believe this bug still exists.

      1. solr-5330.patch
        0.9 kB
        Michael Froh

        Activity

        No work has yet been logged on this issue.

          People

          • Assignee:
            Yonik Seeley
            Reporter:
            Michael Froh
          • Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development