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 Dominique Bejean <do...@eolya.fr> on 2012/08/27 23:40:29 UTC

RessourceLoader in Solr 4 beta

Hi,

I wrote a custom fieldtype that need to read a configuration file in the 
conf directory of the core and also get the absolute path of the conf 
directory

In solr 4 alpha, my code was something like :


import org.apache.solr.core.SolrResourceLoader;
...

public class MultilingualField extends TextField implements 
ResourceLoaderAware {
...

public void inform(ResourceLoader loader) {
     List<String> lines = loader.getLines("multiligual.xml");
     // do something with lines

     String configDir = ((SolrResourceLoader) loader).getConfigDir();
     // do something with configDir
...






In beta version, there was a big refactoring of analyzer factories and 
ressource loaders

now, inform method signature is

public void inform(org.apache.lucene.analysis.util.ResourceLoader loader) {

...


I still can read the configuration file with something like

             FileInputStream fis = (FileInputStream) 
loader.openResource("multilingual.xml");

But, I can't get the conf directory absolute path anymore.


Any suggestion ?

Thank you.

Dominique

Re: RessourceLoader in Solr 4 beta

Posted by Dominique Bejean <do...@eolya.fr>.
Hi,

I reply to myslef.

In fact in Solr 4 beta, org.apache.lucene.analysis.util.ResourceLoader 
is a SolrResourceLoader.

However getConfigDir do not return the absolute path to the config 
directory. I mimiced the openResource method from ResourceLoader in 
order to write my own getConfigDir method

     public void inform(org.apache.lucene.analysis.util.ResourceLoader 
loader) {
         String configDir = getConfigDir(loader);
         ...
     }

     private String 
getConfigDir(org.apache.lucene.analysis.util.ResourceLoader loader) {
           File f = new File(analyzerConfigPath);
           if (!f.isAbsolute()) {
             // try $CWD/$configDir/$resource
             f = new File(((SolrResourceLoader)loader).getConfigDir() + 
analyzerConfigPath);
           }
           if (f.isFile() && f.canRead()) {
               String path = f.getAbsolutePath();
               if (path.lastIndexOf(f.separatorChar)!=-1) {
                   return path.substring(0, 
path.lastIndexOf(f.separatorChar));
               }
               return null;
           }
           return null;
     }


Not sure it is the best way, but it works :)

Dominique


Le 27/08/12 23:40, Dominique Bejean a écrit :
> Hi,
>
> I wrote a custom fieldtype that need to read a configuration file in 
> the conf directory of the core and also get the absolute path of the 
> conf directory
>
> In solr 4 alpha, my code was something like :
>
>
> import org.apache.solr.core.SolrResourceLoader;
> ...
>
> public class MultilingualField extends TextField implements 
> ResourceLoaderAware {
> ...
>
> public void inform(ResourceLoader loader) {
>     List<String> lines = loader.getLines("multiligual.xml");
>     // do something with lines
>
>     String configDir = ((SolrResourceLoader) loader).getConfigDir();
>     // do something with configDir
> ...
>
>
>
>
>
>
> In beta version, there was a big refactoring of analyzer factories and 
> ressource loaders
>
> now, inform method signature is
>
> public void inform(org.apache.lucene.analysis.util.ResourceLoader 
> loader) {
>
> ...
>
>
> I still can read the configuration file with something like
>
>             FileInputStream fis = (FileInputStream) 
> loader.openResource("multilingual.xml");
>
> But, I can't get the conf directory absolute path anymore.
>
>
> Any suggestion ?
>
> Thank you.
>
> Dominique
>