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

Using query time Join in deleteByQuery throws ClassCastException

    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

        1. SOLR-6357.patch
          0.9 kB
          Timothy Potter

          Issue Links

            Activity

              People

              • Assignee:
                mkhludnev Mikhail Khludnev
                Reporter:
                arcadius Arcadius Ahouansou
              • Votes:
                0 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: