Re: 4 days and no solution - please help on Solr
You're right that "Update" is a little misleading as a name. Solr uses that term across the board to refer to new or updated docs. The "add-documents" API is /solr/collection_name/update and is implemented by "UpdateRequestHandlers". You can configure Solr to massage documents before indexing with a "UpdateRequestDocumentChain". etc. So the name is misleading, but at least it's consistent. Best, Jason On Fri, Aug 10, 2018 at 10:52 PM ☼ R Nair wrote: > > Thanks Christoper and Jason. Problem solved. What you mentioned works. > > Thanks a million. Have a good weekend. > > Best, > Ravion > > On Fri, Aug 10, 2018 at 3:31 PM Christopher Schultz < > ch...@christopherschultz.net> wrote: > > > Ravion, > > > > What's wrong with "update request"? Updating a document that does not > > exist... will add it. > > > > -chris > > > > On 8/10/18 3:01 PM, ☼ R Nair wrote: > > > Do you feel that this is only partially complete? > > > > > > Best, Ravion > > > > > > On Fri, Aug 10, 2018, 1:37 PM ☼ R Nair > > wrote: > > > > > >> I saw this. Please provide for add. My issue is with add. There is no > > >> "AddRequesg". So how to do that, thanks > > >> > > >> Best Ravion > > >> > > >> On Fri, Aug 10, 2018, 12:58 PM Jason Gerlowski > > >> wrote: > > >> > > >>> The "setBasicAuthCredentials" method works on all SolrRequest > > >>> implementations. There's a corresponding SolrRequest object for most > > >>> common Solr APIs. As you mentioned, I used QueryRequest above, but > > >>> the same approach works for any SolrRequest object. > > >>> > > >>> The specific one for indexing is "UpdateRequest". Here's a short > > example > > >>> below: > > >>> > > >>> final List docsToIndex = new ArrayList<>(); > > >>> ...Prepare your docs for indexing > > >>> final UpdateRequest update = new UpdateRequest(); > > >>> update.add(docsToIndex); > > >>> update.setBasicAuthCredentials("solr", "solrRocks"); > > >>> update.process(client, "techproducts"); > > >>> On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair > > >>> wrote: > > > > Hi Jason, > > > > Thanks for replying. > > > > I am adding a document, not querying. I am using 7.3 apis. Adding a > > document is done via solrclient.add(). How to set authentication > > in > > this case? Seems I can't use SolrRequest. > > > > Thx, bye > > RAVION > > > > On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski > > > > wrote: > > > > > I'd tried to type my previous SolrJ example snippet from memory. > > That > > > didn't work out so great. I've corrected it below: > > > > > > final List zkUrls = new ArrayList<>(); > > > zkUrls.add("localhost:9983"); > > > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > > > Optional.empty()).build(); > > > > > > final Map queryParamMap = new HashMap > >>> String>(); > > > queryParamMap.put("q", "*:*"); > > > final QueryRequest query = new QueryRequest(new > > > MapSolrParams(queryParamMap)); > > > query.setBasicAuthCredentials("solr", "solrRocks"); > > > > > > query.process(client, "techproducts"); // or, client.request(query) > > > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski < > > >>> gerlowsk...@gmail.com> > > > wrote: > > >> > > >> I would also recommend removing the username/password from your Solr > > >> base URL. You might be able to get things working that way, but > > >>> it's > > >> definitely less common, and it wouldn't surprise me if some parts of > > >> SolrJ mishandle a URL in that format. Though that's just a hunch on > > >> my part. > > >> On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski < > > >>> gerlowsk...@gmail.com> > > > wrote: > > >>> > > >>> Hi Ravion, > > >>> > > >>> (Note: I'm not sure what Solr version you're using. My answer > > >>> below > > >>> assumes Solr 7 APIs. These APIs don't change often, but you might > > >>> find them under slightly different names in your version of Solr.) > > >>> > > >>> SolrJ provides 2 ways (that I know of) to provide basic auth > > > credentials. > > >>> > > >>> The first (and IMO simplest) way is to use the > > >>> setBasicAuthCredentials > > >>> method on each individual SolrRequest. You can see what this > > >>> looks > > >>> like in the example below: > > >>> > > >>> final SolrClient client = new > > >>> > > >>> CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > > >>> client.setDefaultCollection("collection1"); > > >>> SolrQuery req = new SolrQuery("*:*"); > > >>> req.setBasicAuthCredentials("yourUsername", "yourPassword); > > >>> client.query(req); > > >>> > > >>> SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which > > >>> reads > > >>> the username/password from Java system properties, and is used to > > >>> configure the HttpClient that SolrJ creates internally for sending > >
Re: 4 days and no solution - please help on Solr
Thanks Christoper and Jason. Problem solved. What you mentioned works. Thanks a million. Have a good weekend. Best, Ravion On Fri, Aug 10, 2018 at 3:31 PM Christopher Schultz < ch...@christopherschultz.net> wrote: > Ravion, > > What's wrong with "update request"? Updating a document that does not > exist... will add it. > > -chris > > On 8/10/18 3:01 PM, ☼ R Nair wrote: > > Do you feel that this is only partially complete? > > > > Best, Ravion > > > > On Fri, Aug 10, 2018, 1:37 PM ☼ R Nair > wrote: > > > >> I saw this. Please provide for add. My issue is with add. There is no > >> "AddRequesg". So how to do that, thanks > >> > >> Best Ravion > >> > >> On Fri, Aug 10, 2018, 12:58 PM Jason Gerlowski > >> wrote: > >> > >>> The "setBasicAuthCredentials" method works on all SolrRequest > >>> implementations. There's a corresponding SolrRequest object for most > >>> common Solr APIs. As you mentioned, I used QueryRequest above, but > >>> the same approach works for any SolrRequest object. > >>> > >>> The specific one for indexing is "UpdateRequest". Here's a short > example > >>> below: > >>> > >>> final List docsToIndex = new ArrayList<>(); > >>> ...Prepare your docs for indexing > >>> final UpdateRequest update = new UpdateRequest(); > >>> update.add(docsToIndex); > >>> update.setBasicAuthCredentials("solr", "solrRocks"); > >>> update.process(client, "techproducts"); > >>> On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair > >>> wrote: > > Hi Jason, > > Thanks for replying. > > I am adding a document, not querying. I am using 7.3 apis. Adding a > document is done via solrclient.add(). How to set authentication > in > this case? Seems I can't use SolrRequest. > > Thx, bye > RAVION > > On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski > > wrote: > > > I'd tried to type my previous SolrJ example snippet from memory. > That > > didn't work out so great. I've corrected it below: > > > > final List zkUrls = new ArrayList<>(); > > zkUrls.add("localhost:9983"); > > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > > Optional.empty()).build(); > > > > final Map queryParamMap = new HashMap >>> String>(); > > queryParamMap.put("q", "*:*"); > > final QueryRequest query = new QueryRequest(new > > MapSolrParams(queryParamMap)); > > query.setBasicAuthCredentials("solr", "solrRocks"); > > > > query.process(client, "techproducts"); // or, client.request(query) > > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski < > >>> gerlowsk...@gmail.com> > > wrote: > >> > >> I would also recommend removing the username/password from your Solr > >> base URL. You might be able to get things working that way, but > >>> it's > >> definitely less common, and it wouldn't surprise me if some parts of > >> SolrJ mishandle a URL in that format. Though that's just a hunch on > >> my part. > >> On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski < > >>> gerlowsk...@gmail.com> > > wrote: > >>> > >>> Hi Ravion, > >>> > >>> (Note: I'm not sure what Solr version you're using. My answer > >>> below > >>> assumes Solr 7 APIs. These APIs don't change often, but you might > >>> find them under slightly different names in your version of Solr.) > >>> > >>> SolrJ provides 2 ways (that I know of) to provide basic auth > > credentials. > >>> > >>> The first (and IMO simplest) way is to use the > >>> setBasicAuthCredentials > >>> method on each individual SolrRequest. You can see what this > >>> looks > >>> like in the example below: > >>> > >>> final SolrClient client = new > >>> > >>> CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > >>> client.setDefaultCollection("collection1"); > >>> SolrQuery req = new SolrQuery("*:*"); > >>> req.setBasicAuthCredentials("yourUsername", "yourPassword); > >>> client.query(req); > >>> > >>> SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which > >>> reads > >>> the username/password from Java system properties, and is used to > >>> configure the HttpClient that SolrJ creates internally for sending > >>> requests. I find this second method a little more complex, and it > >>> looks like you're providing your own HttpClient anyways, so for > >>> both > >>> those reasons I'd recommend sticking with the first approach (at > >>> least > >>> while you're getting things up and running). > >>> > >>> Hope that helps. > >>> > >>> Best, > >>> > >>> Jason > >>> > >>> On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair < > >>> ravishankar.n...@gmail.com> > > wrote: > > Dear all, > > I have tried my best to do it - searched all Google. But I an=m > unsuccessful. Kindly help. > > We have a solo environment. Its
Re: 4 days and no solution - please help on Solr
Ravion, What's wrong with "update request"? Updating a document that does not exist... will add it. -chris On 8/10/18 3:01 PM, ☼ R Nair wrote: > Do you feel that this is only partially complete? > > Best, Ravion > > On Fri, Aug 10, 2018, 1:37 PM ☼ R Nair wrote: > >> I saw this. Please provide for add. My issue is with add. There is no >> "AddRequesg". So how to do that, thanks >> >> Best Ravion >> >> On Fri, Aug 10, 2018, 12:58 PM Jason Gerlowski >> wrote: >> >>> The "setBasicAuthCredentials" method works on all SolrRequest >>> implementations. There's a corresponding SolrRequest object for most >>> common Solr APIs. As you mentioned, I used QueryRequest above, but >>> the same approach works for any SolrRequest object. >>> >>> The specific one for indexing is "UpdateRequest". Here's a short example >>> below: >>> >>> final List docsToIndex = new ArrayList<>(); >>> ...Prepare your docs for indexing >>> final UpdateRequest update = new UpdateRequest(); >>> update.add(docsToIndex); >>> update.setBasicAuthCredentials("solr", "solrRocks"); >>> update.process(client, "techproducts"); >>> On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair >>> wrote: Hi Jason, Thanks for replying. I am adding a document, not querying. I am using 7.3 apis. Adding a document is done via solrclient.add(). How to set authentication in this case? Seems I can't use SolrRequest. Thx, bye RAVION On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski wrote: > I'd tried to type my previous SolrJ example snippet from memory. That > didn't work out so great. I've corrected it below: > > final List zkUrls = new ArrayList<>(); > zkUrls.add("localhost:9983"); > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > Optional.empty()).build(); > > final Map queryParamMap = new HashMap>> String>(); > queryParamMap.put("q", "*:*"); > final QueryRequest query = new QueryRequest(new > MapSolrParams(queryParamMap)); > query.setBasicAuthCredentials("solr", "solrRocks"); > > query.process(client, "techproducts"); // or, client.request(query) > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski < >>> gerlowsk...@gmail.com> > wrote: >> >> I would also recommend removing the username/password from your Solr >> base URL. You might be able to get things working that way, but >>> it's >> definitely less common, and it wouldn't surprise me if some parts of >> SolrJ mishandle a URL in that format. Though that's just a hunch on >> my part. >> On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski < >>> gerlowsk...@gmail.com> > wrote: >>> >>> Hi Ravion, >>> >>> (Note: I'm not sure what Solr version you're using. My answer >>> below >>> assumes Solr 7 APIs. These APIs don't change often, but you might >>> find them under slightly different names in your version of Solr.) >>> >>> SolrJ provides 2 ways (that I know of) to provide basic auth > credentials. >>> >>> The first (and IMO simplest) way is to use the >>> setBasicAuthCredentials >>> method on each individual SolrRequest. You can see what this >>> looks >>> like in the example below: >>> >>> final SolrClient client = new >>> >>> CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); >>> client.setDefaultCollection("collection1"); >>> SolrQuery req = new SolrQuery("*:*"); >>> req.setBasicAuthCredentials("yourUsername", "yourPassword); >>> client.query(req); >>> >>> SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which >>> reads >>> the username/password from Java system properties, and is used to >>> configure the HttpClient that SolrJ creates internally for sending >>> requests. I find this second method a little more complex, and it >>> looks like you're providing your own HttpClient anyways, so for >>> both >>> those reasons I'd recommend sticking with the first approach (at >>> least >>> while you're getting things up and running). >>> >>> Hope that helps. >>> >>> Best, >>> >>> Jason >>> >>> On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair < >>> ravishankar.n...@gmail.com> > wrote: Dear all, I have tried my best to do it - searched all Google. But I an=m unsuccessful. Kindly help. We have a solo environment. Its secured with userid and >>> password. I used > >>> CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) method to access it. The url is of the form >>> http:/userid:password@/ passionbytes.com/solr. I set defaultCollectionName later. In mycloseablehttpclient, I set Basic Authentication with CredentialProvider and gave url, port, userid and password. I have changed HTTPCLIENT to 4.4.1 version,
Re: 4 days and no solution - please help on Solr
Do you feel that this is only partially complete? Best, Ravion On Fri, Aug 10, 2018, 1:37 PM ☼ R Nair wrote: > I saw this. Please provide for add. My issue is with add. There is no > "AddRequesg". So how to do that, thanks > > Best Ravion > > On Fri, Aug 10, 2018, 12:58 PM Jason Gerlowski > wrote: > >> The "setBasicAuthCredentials" method works on all SolrRequest >> implementations. There's a corresponding SolrRequest object for most >> common Solr APIs. As you mentioned, I used QueryRequest above, but >> the same approach works for any SolrRequest object. >> >> The specific one for indexing is "UpdateRequest". Here's a short example >> below: >> >> final List docsToIndex = new ArrayList<>(); >> ...Prepare your docs for indexing >> final UpdateRequest update = new UpdateRequest(); >> update.add(docsToIndex); >> update.setBasicAuthCredentials("solr", "solrRocks"); >> update.process(client, "techproducts"); >> On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair >> wrote: >> > >> > Hi Jason, >> > >> > Thanks for replying. >> > >> > I am adding a document, not querying. I am using 7.3 apis. Adding a >> > document is done via solrclient.add(). How to set authentication in >> > this case? Seems I can't use SolrRequest. >> > >> > Thx, bye >> > RAVION >> > >> > On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski >> > wrote: >> > >> > > I'd tried to type my previous SolrJ example snippet from memory. That >> > > didn't work out so great. I've corrected it below: >> > > >> > > final List zkUrls = new ArrayList<>(); >> > > zkUrls.add("localhost:9983"); >> > > final SolrClient client = new CloudSolrClient.Builder(zkUrls, >> > > Optional.empty()).build(); >> > > >> > > final Map queryParamMap = new HashMap> String>(); >> > > queryParamMap.put("q", "*:*"); >> > > final QueryRequest query = new QueryRequest(new >> > > MapSolrParams(queryParamMap)); >> > > query.setBasicAuthCredentials("solr", "solrRocks"); >> > > >> > > query.process(client, "techproducts"); // or, client.request(query) >> > > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski < >> gerlowsk...@gmail.com> >> > > wrote: >> > > > >> > > > I would also recommend removing the username/password from your Solr >> > > > base URL. You might be able to get things working that way, but >> it's >> > > > definitely less common, and it wouldn't surprise me if some parts of >> > > > SolrJ mishandle a URL in that format. Though that's just a hunch on >> > > > my part. >> > > > On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski < >> gerlowsk...@gmail.com> >> > > wrote: >> > > > > >> > > > > Hi Ravion, >> > > > > >> > > > > (Note: I'm not sure what Solr version you're using. My answer >> below >> > > > > assumes Solr 7 APIs. These APIs don't change often, but you might >> > > > > find them under slightly different names in your version of Solr.) >> > > > > >> > > > > SolrJ provides 2 ways (that I know of) to provide basic auth >> > > credentials. >> > > > > >> > > > > The first (and IMO simplest) way is to use the >> setBasicAuthCredentials >> > > > > method on each individual SolrRequest. You can see what this >> looks >> > > > > like in the example below: >> > > > > >> > > > > final SolrClient client = new >> > > > > >> CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); >> > > > > client.setDefaultCollection("collection1"); >> > > > > SolrQuery req = new SolrQuery("*:*"); >> > > > > req.setBasicAuthCredentials("yourUsername", "yourPassword); >> > > > > client.query(req); >> > > > > >> > > > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which >> reads >> > > > > the username/password from Java system properties, and is used to >> > > > > configure the HttpClient that SolrJ creates internally for sending >> > > > > requests. I find this second method a little more complex, and it >> > > > > looks like you're providing your own HttpClient anyways, so for >> both >> > > > > those reasons I'd recommend sticking with the first approach (at >> least >> > > > > while you're getting things up and running). >> > > > > >> > > > > Hope that helps. >> > > > > >> > > > > Best, >> > > > > >> > > > > Jason >> > > > > >> > > > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair < >> ravishankar.n...@gmail.com> >> > > wrote: >> > > > > > >> > > > > > Dear all, >> > > > > > >> > > > > > I have tried my best to do it - searched all Google. But I an=m >> > > > > > unsuccessful. Kindly help. >> > > > > > >> > > > > > We have a solo environment. Its secured with userid and >> password. >> > > > > > >> > > > > > I used >> > > > > > >> > > >> CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) >> > > > > > method to access it. The url is of the form >> http:/userid:password@/ >> > > > > > passionbytes.com/solr. I set defaultCollectionName later. >> > > > > > In mycloseablehttpclient, I set Basic Authentication with >> > > > > > CredentialProvider and gave url, port, userid and password. >> > > > > > I have changed HTTPCLIENT to 4.4.1 version,
Re: 4 days and no solution - please help on Solr
I saw this. Please provide for add. My issue is with add. There is no "AddRequesg". So how to do that, thanks Best Ravion On Fri, Aug 10, 2018, 12:58 PM Jason Gerlowski wrote: > The "setBasicAuthCredentials" method works on all SolrRequest > implementations. There's a corresponding SolrRequest object for most > common Solr APIs. As you mentioned, I used QueryRequest above, but > the same approach works for any SolrRequest object. > > The specific one for indexing is "UpdateRequest". Here's a short example > below: > > final List docsToIndex = new ArrayList<>(); > ...Prepare your docs for indexing > final UpdateRequest update = new UpdateRequest(); > update.add(docsToIndex); > update.setBasicAuthCredentials("solr", "solrRocks"); > update.process(client, "techproducts"); > On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair > wrote: > > > > Hi Jason, > > > > Thanks for replying. > > > > I am adding a document, not querying. I am using 7.3 apis. Adding a > > document is done via solrclient.add(). How to set authentication in > > this case? Seems I can't use SolrRequest. > > > > Thx, bye > > RAVION > > > > On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski > > wrote: > > > > > I'd tried to type my previous SolrJ example snippet from memory. That > > > didn't work out so great. I've corrected it below: > > > > > > final List zkUrls = new ArrayList<>(); > > > zkUrls.add("localhost:9983"); > > > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > > > Optional.empty()).build(); > > > > > > final Map queryParamMap = new HashMap String>(); > > > queryParamMap.put("q", "*:*"); > > > final QueryRequest query = new QueryRequest(new > > > MapSolrParams(queryParamMap)); > > > query.setBasicAuthCredentials("solr", "solrRocks"); > > > > > > query.process(client, "techproducts"); // or, client.request(query) > > > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski < > gerlowsk...@gmail.com> > > > wrote: > > > > > > > > I would also recommend removing the username/password from your Solr > > > > base URL. You might be able to get things working that way, but it's > > > > definitely less common, and it wouldn't surprise me if some parts of > > > > SolrJ mishandle a URL in that format. Though that's just a hunch on > > > > my part. > > > > On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski < > gerlowsk...@gmail.com> > > > wrote: > > > > > > > > > > Hi Ravion, > > > > > > > > > > (Note: I'm not sure what Solr version you're using. My answer > below > > > > > assumes Solr 7 APIs. These APIs don't change often, but you might > > > > > find them under slightly different names in your version of Solr.) > > > > > > > > > > SolrJ provides 2 ways (that I know of) to provide basic auth > > > credentials. > > > > > > > > > > The first (and IMO simplest) way is to use the > setBasicAuthCredentials > > > > > method on each individual SolrRequest. You can see what this looks > > > > > like in the example below: > > > > > > > > > > final SolrClient client = new > > > > > > CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > > > > > client.setDefaultCollection("collection1"); > > > > > SolrQuery req = new SolrQuery("*:*"); > > > > > req.setBasicAuthCredentials("yourUsername", "yourPassword); > > > > > client.query(req); > > > > > > > > > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which > reads > > > > > the username/password from Java system properties, and is used to > > > > > configure the HttpClient that SolrJ creates internally for sending > > > > > requests. I find this second method a little more complex, and it > > > > > looks like you're providing your own HttpClient anyways, so for > both > > > > > those reasons I'd recommend sticking with the first approach (at > least > > > > > while you're getting things up and running). > > > > > > > > > > Hope that helps. > > > > > > > > > > Best, > > > > > > > > > > Jason > > > > > > > > > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair < > ravishankar.n...@gmail.com> > > > wrote: > > > > > > > > > > > > Dear all, > > > > > > > > > > > > I have tried my best to do it - searched all Google. But I an=m > > > > > > unsuccessful. Kindly help. > > > > > > > > > > > > We have a solo environment. Its secured with userid and password. > > > > > > > > > > > > I used > > > > > > > > > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > > > > > > method to access it. The url is of the form > http:/userid:password@/ > > > > > > passionbytes.com/solr. I set defaultCollectionName later. > > > > > > In mycloseablehttpclient, I set Basic Authentication with > > > > > > CredentialProvider and gave url, port, userid and password. > > > > > > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > > > > > > > > > > > Still, I get the JSON response from server, saying the URL did > not > > > return > > > > > > the state information from SOLR. It says HTTP 401 , > Authentication > > > Required. > > > > > > > > > > > > This is
Re: 4 days and no solution - please help on Solr
The "setBasicAuthCredentials" method works on all SolrRequest implementations. There's a corresponding SolrRequest object for most common Solr APIs. As you mentioned, I used QueryRequest above, but the same approach works for any SolrRequest object. The specific one for indexing is "UpdateRequest". Here's a short example below: final List docsToIndex = new ArrayList<>(); ...Prepare your docs for indexing final UpdateRequest update = new UpdateRequest(); update.add(docsToIndex); update.setBasicAuthCredentials("solr", "solrRocks"); update.process(client, "techproducts"); On Fri, Aug 10, 2018 at 12:47 PM ☼ R Nair wrote: > > Hi Jason, > > Thanks for replying. > > I am adding a document, not querying. I am using 7.3 apis. Adding a > document is done via solrclient.add(). How to set authentication in > this case? Seems I can't use SolrRequest. > > Thx, bye > RAVION > > On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski > wrote: > > > I'd tried to type my previous SolrJ example snippet from memory. That > > didn't work out so great. I've corrected it below: > > > > final List zkUrls = new ArrayList<>(); > > zkUrls.add("localhost:9983"); > > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > > Optional.empty()).build(); > > > > final Map queryParamMap = new HashMap(); > > queryParamMap.put("q", "*:*"); > > final QueryRequest query = new QueryRequest(new > > MapSolrParams(queryParamMap)); > > query.setBasicAuthCredentials("solr", "solrRocks"); > > > > query.process(client, "techproducts"); // or, client.request(query) > > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski > > wrote: > > > > > > I would also recommend removing the username/password from your Solr > > > base URL. You might be able to get things working that way, but it's > > > definitely less common, and it wouldn't surprise me if some parts of > > > SolrJ mishandle a URL in that format. Though that's just a hunch on > > > my part. > > > On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski > > wrote: > > > > > > > > Hi Ravion, > > > > > > > > (Note: I'm not sure what Solr version you're using. My answer below > > > > assumes Solr 7 APIs. These APIs don't change often, but you might > > > > find them under slightly different names in your version of Solr.) > > > > > > > > SolrJ provides 2 ways (that I know of) to provide basic auth > > credentials. > > > > > > > > The first (and IMO simplest) way is to use the setBasicAuthCredentials > > > > method on each individual SolrRequest. You can see what this looks > > > > like in the example below: > > > > > > > > final SolrClient client = new > > > > CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > > > > client.setDefaultCollection("collection1"); > > > > SolrQuery req = new SolrQuery("*:*"); > > > > req.setBasicAuthCredentials("yourUsername", "yourPassword); > > > > client.query(req); > > > > > > > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which reads > > > > the username/password from Java system properties, and is used to > > > > configure the HttpClient that SolrJ creates internally for sending > > > > requests. I find this second method a little more complex, and it > > > > looks like you're providing your own HttpClient anyways, so for both > > > > those reasons I'd recommend sticking with the first approach (at least > > > > while you're getting things up and running). > > > > > > > > Hope that helps. > > > > > > > > Best, > > > > > > > > Jason > > > > > > > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair > > wrote: > > > > > > > > > > Dear all, > > > > > > > > > > I have tried my best to do it - searched all Google. But I an=m > > > > > unsuccessful. Kindly help. > > > > > > > > > > We have a solo environment. Its secured with userid and password. > > > > > > > > > > I used > > > > > > > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > > > > > method to access it. The url is of the form http:/userid:password@/ > > > > > passionbytes.com/solr. I set defaultCollectionName later. > > > > > In mycloseablehttpclient, I set Basic Authentication with > > > > > CredentialProvider and gave url, port, userid and password. > > > > > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > > > > > > > > > Still, I get the JSON response from server, saying the URL did not > > return > > > > > the state information from SOLR. It says HTTP 401 , Authentication > > Required. > > > > > > > > > > This is fourth day on this problem. Any help is appreciated. I have > > done > > > > > whatever is available through documentation and/or Google. > > > > > > > > > > Best, > > > > > Ravion > >
Re: 4 days and no solution - please help on Solr
Hi Jason, Thanks for replying. I am adding a document, not querying. I am using 7.3 apis. Adding a document is done via solrclient.add(). How to set authentication in this case? Seems I can't use SolrRequest. Thx, bye RAVION On Fri, Aug 10, 2018, 10:46 AM Jason Gerlowski wrote: > I'd tried to type my previous SolrJ example snippet from memory. That > didn't work out so great. I've corrected it below: > > final List zkUrls = new ArrayList<>(); > zkUrls.add("localhost:9983"); > final SolrClient client = new CloudSolrClient.Builder(zkUrls, > Optional.empty()).build(); > > final Map queryParamMap = new HashMap(); > queryParamMap.put("q", "*:*"); > final QueryRequest query = new QueryRequest(new > MapSolrParams(queryParamMap)); > query.setBasicAuthCredentials("solr", "solrRocks"); > > query.process(client, "techproducts"); // or, client.request(query) > On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski > wrote: > > > > I would also recommend removing the username/password from your Solr > > base URL. You might be able to get things working that way, but it's > > definitely less common, and it wouldn't surprise me if some parts of > > SolrJ mishandle a URL in that format. Though that's just a hunch on > > my part. > > On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski > wrote: > > > > > > Hi Ravion, > > > > > > (Note: I'm not sure what Solr version you're using. My answer below > > > assumes Solr 7 APIs. These APIs don't change often, but you might > > > find them under slightly different names in your version of Solr.) > > > > > > SolrJ provides 2 ways (that I know of) to provide basic auth > credentials. > > > > > > The first (and IMO simplest) way is to use the setBasicAuthCredentials > > > method on each individual SolrRequest. You can see what this looks > > > like in the example below: > > > > > > final SolrClient client = new > > > CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > > > client.setDefaultCollection("collection1"); > > > SolrQuery req = new SolrQuery("*:*"); > > > req.setBasicAuthCredentials("yourUsername", "yourPassword); > > > client.query(req); > > > > > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which reads > > > the username/password from Java system properties, and is used to > > > configure the HttpClient that SolrJ creates internally for sending > > > requests. I find this second method a little more complex, and it > > > looks like you're providing your own HttpClient anyways, so for both > > > those reasons I'd recommend sticking with the first approach (at least > > > while you're getting things up and running). > > > > > > Hope that helps. > > > > > > Best, > > > > > > Jason > > > > > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair > wrote: > > > > > > > > Dear all, > > > > > > > > I have tried my best to do it - searched all Google. But I an=m > > > > unsuccessful. Kindly help. > > > > > > > > We have a solo environment. Its secured with userid and password. > > > > > > > > I used > > > > > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > > > > method to access it. The url is of the form http:/userid:password@/ > > > > passionbytes.com/solr. I set defaultCollectionName later. > > > > In mycloseablehttpclient, I set Basic Authentication with > > > > CredentialProvider and gave url, port, userid and password. > > > > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > > > > > > > Still, I get the JSON response from server, saying the URL did not > return > > > > the state information from SOLR. It says HTTP 401 , Authentication > Required. > > > > > > > > This is fourth day on this problem. Any help is appreciated. I have > done > > > > whatever is available through documentation and/or Google. > > > > > > > > Best, > > > > Ravion >
Re: 4 days and no solution - please help on Solr
I'd tried to type my previous SolrJ example snippet from memory. That didn't work out so great. I've corrected it below: final List zkUrls = new ArrayList<>(); zkUrls.add("localhost:9983"); final SolrClient client = new CloudSolrClient.Builder(zkUrls, Optional.empty()).build(); final Map queryParamMap = new HashMap(); queryParamMap.put("q", "*:*"); final QueryRequest query = new QueryRequest(new MapSolrParams(queryParamMap)); query.setBasicAuthCredentials("solr", "solrRocks"); query.process(client, "techproducts"); // or, client.request(query) On Fri, Aug 10, 2018 at 10:12 AM Jason Gerlowski wrote: > > I would also recommend removing the username/password from your Solr > base URL. You might be able to get things working that way, but it's > definitely less common, and it wouldn't surprise me if some parts of > SolrJ mishandle a URL in that format. Though that's just a hunch on > my part. > On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski > wrote: > > > > Hi Ravion, > > > > (Note: I'm not sure what Solr version you're using. My answer below > > assumes Solr 7 APIs. These APIs don't change often, but you might > > find them under slightly different names in your version of Solr.) > > > > SolrJ provides 2 ways (that I know of) to provide basic auth credentials. > > > > The first (and IMO simplest) way is to use the setBasicAuthCredentials > > method on each individual SolrRequest. You can see what this looks > > like in the example below: > > > > final SolrClient client = new > > CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > > client.setDefaultCollection("collection1"); > > SolrQuery req = new SolrQuery("*:*"); > > req.setBasicAuthCredentials("yourUsername", "yourPassword); > > client.query(req); > > > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which reads > > the username/password from Java system properties, and is used to > > configure the HttpClient that SolrJ creates internally for sending > > requests. I find this second method a little more complex, and it > > looks like you're providing your own HttpClient anyways, so for both > > those reasons I'd recommend sticking with the first approach (at least > > while you're getting things up and running). > > > > Hope that helps. > > > > Best, > > > > Jason > > > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair wrote: > > > > > > Dear all, > > > > > > I have tried my best to do it - searched all Google. But I an=m > > > unsuccessful. Kindly help. > > > > > > We have a solo environment. Its secured with userid and password. > > > > > > I used > > > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > > > method to access it. The url is of the form http:/userid:password@/ > > > passionbytes.com/solr. I set defaultCollectionName later. > > > In mycloseablehttpclient, I set Basic Authentication with > > > CredentialProvider and gave url, port, userid and password. > > > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > > > > > Still, I get the JSON response from server, saying the URL did not return > > > the state information from SOLR. It says HTTP 401 , Authentication > > > Required. > > > > > > This is fourth day on this problem. Any help is appreciated. I have done > > > whatever is available through documentation and/or Google. > > > > > > Best, > > > Ravion
Re: 4 days and no solution - please help on Solr
I would also recommend removing the username/password from your Solr base URL. You might be able to get things working that way, but it's definitely less common, and it wouldn't surprise me if some parts of SolrJ mishandle a URL in that format. Though that's just a hunch on my part. On Fri, Aug 10, 2018 at 10:09 AM Jason Gerlowski wrote: > > Hi Ravion, > > (Note: I'm not sure what Solr version you're using. My answer below > assumes Solr 7 APIs. These APIs don't change often, but you might > find them under slightly different names in your version of Solr.) > > SolrJ provides 2 ways (that I know of) to provide basic auth credentials. > > The first (and IMO simplest) way is to use the setBasicAuthCredentials > method on each individual SolrRequest. You can see what this looks > like in the example below: > > final SolrClient client = new > CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); > client.setDefaultCollection("collection1"); > SolrQuery req = new SolrQuery("*:*"); > req.setBasicAuthCredentials("yourUsername", "yourPassword); > client.query(req); > > SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which reads > the username/password from Java system properties, and is used to > configure the HttpClient that SolrJ creates internally for sending > requests. I find this second method a little more complex, and it > looks like you're providing your own HttpClient anyways, so for both > those reasons I'd recommend sticking with the first approach (at least > while you're getting things up and running). > > Hope that helps. > > Best, > > Jason > > On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair wrote: > > > > Dear all, > > > > I have tried my best to do it - searched all Google. But I an=m > > unsuccessful. Kindly help. > > > > We have a solo environment. Its secured with userid and password. > > > > I used > > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > > method to access it. The url is of the form http:/userid:password@/ > > passionbytes.com/solr. I set defaultCollectionName later. > > In mycloseablehttpclient, I set Basic Authentication with > > CredentialProvider and gave url, port, userid and password. > > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > > > Still, I get the JSON response from server, saying the URL did not return > > the state information from SOLR. It says HTTP 401 , Authentication Required. > > > > This is fourth day on this problem. Any help is appreciated. I have done > > whatever is available through documentation and/or Google. > > > > Best, > > Ravion
Re: 4 days and no solution - please help on Solr
Hi Ravion, (Note: I'm not sure what Solr version you're using. My answer below assumes Solr 7 APIs. These APIs don't change often, but you might find them under slightly different names in your version of Solr.) SolrJ provides 2 ways (that I know of) to provide basic auth credentials. The first (and IMO simplest) way is to use the setBasicAuthCredentials method on each individual SolrRequest. You can see what this looks like in the example below: final SolrClient client = new CloudSolrCLient.Builder(solrURLs).withHttpClient(myHttpClient).build(); client.setDefaultCollection("collection1"); SolrQuery req = new SolrQuery("*:*"); req.setBasicAuthCredentials("yourUsername", "yourPassword); client.query(req); SolrJ also has a PreemptiveBasicAuthClientBuilderFactory, which reads the username/password from Java system properties, and is used to configure the HttpClient that SolrJ creates internally for sending requests. I find this second method a little more complex, and it looks like you're providing your own HttpClient anyways, so for both those reasons I'd recommend sticking with the first approach (at least while you're getting things up and running). Hope that helps. Best, Jason On Thu, Aug 9, 2018 at 5:47 PM ☼ R Nair wrote: > > Dear all, > > I have tried my best to do it - searched all Google. But I an=m > unsuccessful. Kindly help. > > We have a solo environment. Its secured with userid and password. > > I used > CloudSolrClient.Builder(solrURLs).withHttpClient(mycloseablehttpclient) > method to access it. The url is of the form http:/userid:password@/ > passionbytes.com/solr. I set defaultCollectionName later. > In mycloseablehttpclient, I set Basic Authentication with > CredentialProvider and gave url, port, userid and password. > I have changed HTTPCLIENT to 4.4.1 version, even tried 4.5.3. > > Still, I get the JSON response from server, saying the URL did not return > the state information from SOLR. It says HTTP 401 , Authentication Required. > > This is fourth day on this problem. Any help is appreciated. I have done > whatever is available through documentation and/or Google. > > Best, > Ravion