0

I've created a solr core with configurations and when I try to launch solr embedded server, I get the below error.

Caused by: java.io.IOException: Can't find resource 'solrconfig.xml' in 
 classpath or '/home/tharindu/Desktop/solr_tmp/custom/newsportal/collection1/conf'
    at org.apache.solr.core.SolrResourceLoader.openResource(SolrResourceLoader.java:362)
    at org.apache.solr.core.SolrResourceLoader.openConfig(SolrResourceLoader.java:308)
    at org.apache.solr.core.Config.<init>(Config.java:117)
    at org.apache.solr.core.Config.<init>(Config.java:87)
    at org.apache.solr.core.SolrConfig.<init>(SolrConfig.java:167)
    at org.apache.solr.core.SolrConfig.readFromResourceLoader(SolrConfig.java:145)
    ... 9 more

It seems that it is trying to find a solr core named collection1 by default.

The custom folder contains,

-- solr.xml
-- newsportal
   -- conf
      -- schema.xml
      -- solrconfig.xml
   -- core.properties

I'm using Spring solr template. The EmbeddedServer configuration is below.

    @Bean
    public EmbeddedSolrServerFactoryBean solrServerFactoryBean() {
        EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();
        factory.setSolrHome("/home/tharindu/Desktop/solr_tmp/custom/newsportal");
        return factory;
    }

    @Bean
    public SolrTemplate solrTemplate() throws Exception {
        return new SolrTemplate(solrServerFactoryBean().getObject(), "newsportal");
    }

When I change the EmbeddedServer bean as follows,(only changing the path of the core)

@Bean
public EmbeddedSolrServerFactoryBean solrServerFactoryBean() {
    EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();
    factory.setSolrHome("/home/tharindu/Desktop/solr_tmp/custom");
    return factory;
}

I get the below error.

Caused by: org.apache.solr.common.SolrException: No such core: 
    at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:112)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:91)
    at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
    at org.springframework.data.solr.core.SolrTemplate$11.doInSolr(SolrTemplate.java:417)
    at org.springframework.data.solr.core.SolrTemplate$11.doInSolr(SolrTemplate.java:414)
    at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:141)
    ... 59 more

But when I rename the core folder as collection1 and change core name in the core.properties to name=collection1, everything works fine.

Below is my schema.xml and solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="newsportal" version="1.5">
    <types>
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
        <fieldType name="text_general" class="solr.TextField" omitNorms="true">
            <analyzer>
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.StopFilterFactory" words="stopwords_en.txt" />
            </analyzer>
        </fieldType>
    </types>
    <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true"/>

        <field name="title" type="text_general" indexed="true" stored="true" required="true" termVectors="true"/>
        <field name="description" type="text_general" indexed="true" stored="true" required="true" termVectors="true"/>

        <field name="keywords" type="text_general" indexed="true" stored="true" multiValued="true" />

        <defaultSearchField>keywords</defaultSearchField>

        <copyField source="title" dest="keywords"/>
        <copyField source="description" dest="keywords"/>

    </fields>

    <uniqueKey>id</uniqueKey>
</schema>

solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <luceneMatchVersion>LUCENE_48</luceneMatchVersion>
    <dataDir>${solr.data.dir:}</dataDir>
    <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}" />
    <codecFactory class="solr.SchemaCodecFactory" />
    <schemaFactory class="ClassicIndexSchemaFactory" />
    <indexConfig>
        <lockType>${solr.lock.type:native}</lockType>
    </indexConfig>
    <updateHandler class="solr.DirectUpdateHandler2"/>
    <query>
        <maxBooleanClauses>1024</maxBooleanClauses>
        <filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0" />
        <queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />
        <documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0" />
        <enableLazyFieldLoading>true</enableLazyFieldLoading>
        <queryResultWindowSize>20</queryResultWindowSize>
        <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
        <useColdSearcher>false</useColdSearcher>
        <maxWarmingSearchers>2</maxWarmingSearchers>
    </query>
    <requestDispatcher handleSelect="false">
        <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000" formdataUploadLimitInKB="2048" />
        <httpCaching never304="true" />
    </requestDispatcher>
    <requestHandler name="/select" class="solr.SearchHandler" default="true">
        <lst name="defaults">
            <str name="sort">title asc</str>
            <str name="echoParams">explicit</str>
            <int name="rows">10</int>
            <str name="q">*:*</str>
            <bool name="facet">false</bool>
        </lst>
    </requestHandler>
    <requestHandler name="/update" class="solr.UpdateRequestHandler"/>
    <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
    <requestHandler name="/analysis/document" class="solr.DocumentAnalysisRequestHandler" startup="lazy" />
    <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
    <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
        <lst name="invariants">
            <str name="q">*:*</str>
        </lst>
        <lst name="defaults">
            <str name="echoParams">all</str>
        </lst>
    </requestHandler>
    <admin>
        <defaultQuery>*:*</defaultQuery>
    </admin>
</config>

core.properties file

name=newsportal

EDIT

solr.xml file

<solr>

  <solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8983}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>

Solr version : 4.10.4

Spring solr data version : 1.5.5.BUILD-SNAPSHOT

I appreciate any help to resolve this issue.

tharindu_DG
  • 8,900
  • 6
  • 52
  • 64

2 Answers2

1

Unfortunately, there is no clean approach how to do that because collection1 is harcoded in EmbeddedSolrServerFactory class (corresponding Jira ticket).

But I tried this hacky one and it works for me:

@Bean
public EmbeddedSolrServerFactoryBean solrClient() {
    EmbeddedSolrServerFactoryBean embeddedSolrServerFactoryBean = new EmbeddedSolrServerFactoryBean() {

        @Override
        public EmbeddedSolrServer getObject() {
            return (EmbeddedSolrServer) getSolrClient("<YOUR_CORE_NAME>");
        }
    };

    embeddedSolrServerFactoryBean.setSolrHome("<YOUR_SOLR_HOME");

    return embeddedSolrServerFactoryBean;
}
heldev
  • 846
  • 7
  • 9
0

have a look at this url https://wiki.apache.org/solr/Solr.xml%20(supported%20through%204.x)

To enable support for dynamic SolrCore administration, place a file named solr.xml in the solr.home directory. Here is an example solr.xml file:

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores">
  <core name="core0" instanceDir="core0" />
  <core name="core1" instanceDir="core1" />
 </cores>
</solr>

Thus, change the file solr.xml with the an appropriate entry

 <core name="core0" instanceDir="core0" />

Hope this helps

tharindu_DG
  • 8,900
  • 6
  • 52
  • 64
Periklis Douvitsas
  • 2,431
  • 1
  • 13
  • 14