Hi Arnold, why don't you use solrj (in this case a CloudSolrClient) instead of dealing with such low-level details? The actual location of the document you are looking for would be completely abstracted.
Best, Andrea On Thu, 29 Aug 2019, 18:50 Arnold Bronley, <arnoldbron...@gmail.com> wrote: > So, here is the problem that I am trying to solve. I am moving from Solr > master-slave architecture to SolrCloud architecture. I have one custom Solr > plugin that does following: > > 1. When a document (say document with unique id doc1)is getting indexed to > a core say core A then this plugin adds one more field to the indexing > request. It fetches this new field from core B. Core B in our case > maintains popularity score field for each document which gets calculated in > a different project. It fetches the popularity score from score B for doc1 > and adds it to indexing request. > 2. In following code, dataInfo.dataSource is the name of the core B. > > I can use the name of the core B like collection_shard1_replica_n21 and it > works. But it is not a good solution. What if I had a multiple shards for > core B? In that case the the doc1 that I am trying to find might not be > present in collection_shard1_replica_n21. > > So is there something like, > > SolrCollecton dataCollection = getCollection(dataInfo.dataSource); > > @Override > public void processAdd(AddUpdateCommand cmd) throws IOException { > SolrInputDocument doc = cmd.getSolrInputDocument(); > String uniqueId = getUniqueId(doc); > > SolrCore dataCore = > req.getCore().getCoreContainer().getCore(dataInfo.dataSource); > > if (dataCore == null){ > LOG.error("Solr core '{}' to use as data source could not be > found! " > + "Please check if it is loaded.", dataInfo.dataSource); > } else{ > > Document sourceDoc = getSourceDocument(dataCore, uniqueId); > > if (sourceDoc != null){ > > populateDocToBeAddedFromSourceDoc(doc,sourceDoc); > } > } > > // pass it up the chain > super.processAdd(cmd); > } > > > On Wed, Aug 28, 2019 at 6:15 PM Erick Erickson <erickerick...@gmail.com> > wrote: > > > No, you cannot just use the collection name. Replicas are just cores. > > You can host many replicas of a single collection on a single Solr node > > in a single CoreContainer (there’s only one per Solr JVM). If you just > > specified a collection name how would the code have any clue which > > of the possibilities to return? > > > > The name is in the form collection_shard1_replica_n21 > > > > How do you know where the doc you’re working on? Put the ID through > > the hashing mechanism. > > > > This isn’t the same at all if you’re running stand-alone, then there’s > only > > one name. > > > > But as I indicated above, your ask for just using the collection name > isn’t > > going to work by definition. > > > > So perhaps this is an XY problem. You’re asking about getCore, which is > > a very specific, low-level concept. What are you trying to do at a higher > > level? Why do you think you need to get a core? What do you want to _do_ > > with the doc that you need the core it resides in? > > > > Best, > > Erick > > > > > On Aug 28, 2019, at 5:28 PM, Arnold Bronley <arnoldbron...@gmail.com> > > wrote: > > > > > > Wait, would I need to use core name like collection1_shard1_replica_n4 > > > etc/? Can't I use collection name? What if I have multiple shards, how > > > would I know where does the document that I am working with lives in > > > currently. > > > I would rather prefer to use collection name and expect the core > > > information to be abstracted out that way. > > > > > > On Wed, Aug 28, 2019 at 5:13 PM Erick Erickson < > erickerick...@gmail.com> > > > wrote: > > > > > >> Hmmm, should work. What is your core_name? There’s strings like > > >> collection1_shard1_replica_n4 and core_node6. Are you sure you’re > using > > the > > >> right one? > > >> > > >>> On Aug 28, 2019, at 3:56 PM, Arnold Bronley <arnoldbron...@gmail.com > > > > >> wrote: > > >>> > > >>> Hi, > > >>> > > >>> In a custom Solr plugin code, > > >>> req.getCore().getCoreContainer().getCore(core_name) is returning null > > >> even > > >>> if core by name core_name is loaded and up in Solr. req is object > > >>> of SolrQueryRequest class. I am using Solr 8.2.0 in SolrCloud mode. > > >>> > > >>> Any ideas on why this might be the case? > > >> > > >> > > > > >