You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Ken Krugler <kk...@transpac.com> on 2010/05/22 01:55:20 UTC

SolrJ/EmbeddedSolrServer

I've got a situation where my data directory (a) needs to live  
elsewhere besides inside of Solr home, (b) moves to a different  
location when updating indexes, and (c) setting up a symlink from  
<solr_home>/data isn't a great option.

So what's the best approach to making this work with SolrJ? The low- 
level solution seems to be

- create my own SolrCore instance, where I specify the data directory
- use that to update the CoreContainer
- create a new EmbeddedSolrServer

But recreating the EmbeddedSolrServer with each index update feels  
wrong, and I'd like to avoid mucking around with low-level SolrCore  
instantiation.

Any other approaches?

Thanks,

-- Ken

--------------------------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c   w e b   m i n i n g





Re: SolrJ/EmbeddedSolrServer

Posted by Ken Krugler <kk...@transpac.com>.
Answering my own question...

I can use CoreContainer.reload("core name") to force a reload.

I assume that if I've got an EmbeddedSolrServer running at the time I  
do this reload, everything will happen correctly under the covers.

So now I just need to find out how to programmatically change settings  
for a core.

-- Ken

On May 22, 2010, at 11:24am, Ryan McKinley wrote:

> Check:
> http://wiki.apache.org/solr/CoreAdmin
>
> Unless I'm missing something, I think you should be able to sort  
> what you need

If I'm using SolrJ, is there a programmatic way to force a reload of a  
core?

This, of course, assumes that I'm able to programmatically change the  
location of the dataDir, which is another issue.

Thanks,

-- Ken

> On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
> <kk...@transpac.com> wrote:
>> I've got a situation where my data directory (a) needs to live  
>> elsewhere
>> besides inside of Solr home, (b) moves to a different location when  
>> updating
>> indexes, and (c) setting up a symlink from <solr_home>/data isn't a  
>> great
>> option.
>>
>> So what's the best approach to making this work with SolrJ? The low- 
>> level
>> solution seems to be
>>
>> - create my own SolrCore instance, where I specify the data directory
>> - use that to update the CoreContainer
>> - create a new EmbeddedSolrServer
>>
>> But recreating the EmbeddedSolrServer with each index update feels  
>> wrong,
>> and I'd like to avoid mucking around with low-level SolrCore  
>> instantiation.
>>
>> Any other approaches?
>>
>> Thanks,
>>
>> -- Ken
>>
>> --------------------------------------------
>> Ken Krugler
>> +1 530-210-6378
>> http://bixolabs.com
>> e l a s t i c   w e b   m i n i n g
>>
>>
>>
>>
>>

--------------------------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c   w e b   m i n i n g





Re: SolrJ/EmbeddedSolrServer

Posted by Ken Krugler <kk...@transpac.com>.
Sort of answering my own question here too...

It seems like I need to get the current core, and use that to  
instantiate a new SolrCore with the same exact config, other than the  
dataDir.

The documentation for SolrCore()'s constructor says:

"If a core with the same name already exists, it will be stopped and  
replaced by this one"

But it's unclear to me whether this will do a graceful swap (like what  
I want) or a hard shutdown of the old core.

Thanks,

-- Ken

On May 22, 2010, at 11:25am, Ryan McKinley wrote:

> accidentally hit send...
>
> Eache core can have the dataDir set explicitly.
>
> <core name="core0" instanceDir="core0">
>   <property name="dataDir" value="/data/core0" />
> </core>
> <core name="core1" instanceDir="core1">
>   <property name="dataDir" value="/data/core1" />
> </core>
>
> If you want to do this with solrj, you would need to manipulate the
> CoreDescriptor objects.

I'm hoping somebody can clarify what's up with the CoreDescriptor  
class, since there's not much documentation.

As far as I can tell, when you create a new SolrCore, it saves off the  
CoreDescriptor you pass in, and does nothing with it.

The constructor for SolrCore also takes a datadir param, so I don't  
see how the CoreDescriptor's dataDir gets used during construction.

And changing the CoreDescriptor's dataDir has no effect, since it's  
essentially a POJO.

So how would one go about changing the dataDir for a core, in a multi- 
core setup?

Thanks,

-- Ken

> On Sat, May 22, 2010 at 2:24 PM, Ryan McKinley <ry...@gmail.com>  
> wrote:
>> Check:
>> http://wiki.apache.org/solr/CoreAdmin
>>
>> Unless I'm missing something, I think you should be able to sort  
>> what you need
>>
>>
>> On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
>> <kk...@transpac.com> wrote:
>>> I've got a situation where my data directory (a) needs to live  
>>> elsewhere
>>> besides inside of Solr home, (b) moves to a different location  
>>> when updating
>>> indexes, and (c) setting up a symlink from <solr_home>/data isn't  
>>> a great
>>> option.
>>>
>>> So what's the best approach to making this work with SolrJ? The  
>>> low-level
>>> solution seems to be
>>>
>>> - create my own SolrCore instance, where I specify the data  
>>> directory
>>> - use that to update the CoreContainer
>>> - create a new EmbeddedSolrServer
>>>
>>> But recreating the EmbeddedSolrServer with each index update feels  
>>> wrong,
>>> and I'd like to avoid mucking around with low-level SolrCore  
>>> instantiation.
>>>
>>> Any other approaches?
>>>
>>> Thanks,
>>>
>>> -- Ken
>>>
>>> --------------------------------------------
>>> Ken Krugler
>>> +1 530-210-6378
>>> http://bixolabs.com
>>> e l a s t i c   w e b   m i n i n g
>>>
>>>
>>>
>>>
>>>
>>

--------------------------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c   w e b   m i n i n g





Re: SolrJ/EmbeddedSolrServer

Posted by Ken Krugler <kk...@transpac.com>.
On May 22, 2010, at 11:25am, Ryan McKinley wrote:

> accidentally hit send...
>
> Eache core can have the dataDir set explicitly.
>
>  <core name="core0" instanceDir="core0">
>    <property name="dataDir" value="/data/core0" />
>  </core>
>  <core name="core1" instanceDir="core1">
>    <property name="dataDir" value="/data/core1" />
>  </core>
>
> If you want to do this with solrj, you would need to manipulate the
> CoreDescriptor objects.

I'm hoping somebody can clarify what's up with the CoreDescriptor  
class, since there's not much documentation.

As far as I can tell, when you create a new SolrCore, it saves off the  
CoreDescriptor you pass in, and does nothing with it.

The constructor for SolrCore also takes a datadir param, so I don't  
see how the CoreDescriptor's dataDir gets used during construction.

And changing the CoreDescriptor's dataDir has no effect, since it's  
essentially a POJO.

So how would one go about changing the dataDir for a core, in a multi- 
core setup?

Thanks,

-- Ken

> On Sat, May 22, 2010 at 2:24 PM, Ryan McKinley <ry...@gmail.com>  
> wrote:
>> Check:
>> http://wiki.apache.org/solr/CoreAdmin
>>
>> Unless I'm missing something, I think you should be able to sort  
>> what you need
>>
>>
>> On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
>> <kk...@transpac.com> wrote:
>>> I've got a situation where my data directory (a) needs to live  
>>> elsewhere
>>> besides inside of Solr home, (b) moves to a different location  
>>> when updating
>>> indexes, and (c) setting up a symlink from <solr_home>/data isn't  
>>> a great
>>> option.
>>>
>>> So what's the best approach to making this work with SolrJ? The  
>>> low-level
>>> solution seems to be
>>>
>>> - create my own SolrCore instance, where I specify the data  
>>> directory
>>> - use that to update the CoreContainer
>>> - create a new EmbeddedSolrServer
>>>
>>> But recreating the EmbeddedSolrServer with each index update feels  
>>> wrong,
>>> and I'd like to avoid mucking around with low-level SolrCore  
>>> instantiation.
>>>
>>> Any other approaches?
>>>
>>> Thanks,
>>>
>>> -- Ken
>>>
>>> --------------------------------------------
>>> Ken Krugler
>>> +1 530-210-6378
>>> http://bixolabs.com
>>> e l a s t i c   w e b   m i n i n g
>>>
>>>
>>>
>>>
>>>
>>

--------------------------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c   w e b   m i n i n g





Re: SolrJ/EmbeddedSolrServer

Posted by Ryan McKinley <ry...@gmail.com>.
accidentally hit send...

Eache core can have the dataDir set explicitly.

  <core name="core0" instanceDir="core0">
    <property name="dataDir" value="/data/core0" />
  </core>
  <core name="core1" instanceDir="core1">
    <property name="dataDir" value="/data/core1" />
  </core>

If you want to do this with solrj, you would need to manipulate the
CoreDescriptor objects.

ryan


On Sat, May 22, 2010 at 2:24 PM, Ryan McKinley <ry...@gmail.com> wrote:
> Check:
> http://wiki.apache.org/solr/CoreAdmin
>
> Unless I'm missing something, I think you should be able to sort what you need
>
>
> On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
> <kk...@transpac.com> wrote:
>> I've got a situation where my data directory (a) needs to live elsewhere
>> besides inside of Solr home, (b) moves to a different location when updating
>> indexes, and (c) setting up a symlink from <solr_home>/data isn't a great
>> option.
>>
>> So what's the best approach to making this work with SolrJ? The low-level
>> solution seems to be
>>
>> - create my own SolrCore instance, where I specify the data directory
>> - use that to update the CoreContainer
>> - create a new EmbeddedSolrServer
>>
>> But recreating the EmbeddedSolrServer with each index update feels wrong,
>> and I'd like to avoid mucking around with low-level SolrCore instantiation.
>>
>> Any other approaches?
>>
>> Thanks,
>>
>> -- Ken
>>
>> --------------------------------------------
>> Ken Krugler
>> +1 530-210-6378
>> http://bixolabs.com
>> e l a s t i c   w e b   m i n i n g
>>
>>
>>
>>
>>
>

Re: SolrJ/EmbeddedSolrServer

Posted by Ken Krugler <kk...@transpac.com>.
On May 22, 2010, at 11:24am, Ryan McKinley wrote:

> Check:
> http://wiki.apache.org/solr/CoreAdmin
>
> Unless I'm missing something, I think you should be able to sort  
> what you need

If I'm using SolrJ, is there a programmatic way to force a reload of a  
core?

This, of course, assumes that I'm able to programmatically change the  
location of the dataDir, which is another issue.

Thanks,

-- Ken

> On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
> <kk...@transpac.com> wrote:
>> I've got a situation where my data directory (a) needs to live  
>> elsewhere
>> besides inside of Solr home, (b) moves to a different location when  
>> updating
>> indexes, and (c) setting up a symlink from <solr_home>/data isn't a  
>> great
>> option.
>>
>> So what's the best approach to making this work with SolrJ? The low- 
>> level
>> solution seems to be
>>
>> - create my own SolrCore instance, where I specify the data directory
>> - use that to update the CoreContainer
>> - create a new EmbeddedSolrServer
>>
>> But recreating the EmbeddedSolrServer with each index update feels  
>> wrong,
>> and I'd like to avoid mucking around with low-level SolrCore  
>> instantiation.
>>
>> Any other approaches?
>>
>> Thanks,
>>
>> -- Ken
>>
>> --------------------------------------------
>> Ken Krugler
>> +1 530-210-6378
>> http://bixolabs.com
>> e l a s t i c   w e b   m i n i n g
>>
>>
>>
>>
>>

--------------------------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
e l a s t i c   w e b   m i n i n g





Re: SolrJ/EmbeddedSolrServer

Posted by Ryan McKinley <ry...@gmail.com>.
Check:
http://wiki.apache.org/solr/CoreAdmin

Unless I'm missing something, I think you should be able to sort what you need


On Fri, May 21, 2010 at 7:55 PM, Ken Krugler
<kk...@transpac.com> wrote:
> I've got a situation where my data directory (a) needs to live elsewhere
> besides inside of Solr home, (b) moves to a different location when updating
> indexes, and (c) setting up a symlink from <solr_home>/data isn't a great
> option.
>
> So what's the best approach to making this work with SolrJ? The low-level
> solution seems to be
>
> - create my own SolrCore instance, where I specify the data directory
> - use that to update the CoreContainer
> - create a new EmbeddedSolrServer
>
> But recreating the EmbeddedSolrServer with each index update feels wrong,
> and I'd like to avoid mucking around with low-level SolrCore instantiation.
>
> Any other approaches?
>
> Thanks,
>
> -- Ken
>
> --------------------------------------------
> Ken Krugler
> +1 530-210-6378
> http://bixolabs.com
> e l a s t i c   w e b   m i n i n g
>
>
>
>
>