Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-6357

Using query time Join in deleteByQuery throws ClassCastException

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.9
    • Fix Version/s: 7.0
    • Component/s: query parsers
    • Labels:
      None

      Description

      Consider the following input document where we have:

      • 1 Samsung mobile phone and
      • 2 manufactures: Apple and Samsung.
      [
         {
            "id":"galaxy note ii",
            "cat":"product",
            "manu_s":"samsung"
         },
         {
            "id":"samsung",
            "cat":"manufacturer",
            "name":"Samsung Electronics"
         },
         {
            "id":"apple",
            "cat":"manufacturer",
            "name":"Apple Inc"
         }
      ]
      

      My objective is to delete from the default index all manufacturers not having any product in the index.

      After indexing ( curl 'http://localhost:8983/solr/update?commit=true' -H "Content-Type: text/json" --data-binary @delete-by-join-query.json )

      I went to

      http://localhost:8983/solr/select?q=cat:manufacturer -{!join from=manu_s to=id}cat:product
      

      and I could see only Apple, the only manufacturer not having any product in the index.

      However, when I use that same query for deletion:

      http://localhost:8983/solr/update?commit=true&stream.body=<delete><query>cat:manufacturer -{!join from=manu_s to=id}cat:product</query></delete>
      

      I get

      java.lang.ClassCastException: org.apache.lucene.search.IndexSearcher cannot be cast to org.apache.solr.search.SolrIndexSearcher
      	at org.apache.solr.search.JoinQuery.createWeight(JoinQParserPlugin.java:143)
      	at org.apache.lucene.search.BooleanQuery$BooleanWeight.<init>(BooleanQuery.java:185)
      	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:526)
      	at org.apache.lucene.search.BooleanQuery$BooleanWeight.<init>(BooleanQuery.java:185)
      	at org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:526)
      	at org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:684)
      	at org.apache.lucene.search.QueryWrapperFilter.getDocIdSet(QueryWrapperFilter.java:55)
      	at org.apache.lucene.index.BufferedUpdatesStream.applyQueryDeletes(BufferedUpdatesStream.java:552)
      	at org.apache.lucene.index.BufferedUpdatesStream.applyDeletesAndUpdates(BufferedUpdatesStream.java:287)
      	at 
      

      This seems to be a bug.

      Looking at the source code, the exception is happening in

       @Override
        public Weight createWeight(IndexSearcher searcher) throws IOException {
          return new JoinQueryWeight((SolrIndexSearcher)searcher);
        }
      

        Attachments

        Issue Links

          Activity

            People

            • Assignee:
              mkhl Mikhail Khludnev
              Reporter:
              arcadius Arcadius Ahouansou

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment