2016-08-21 2 views
0

Я создал ядро ​​solr с конфигурациями, и когда я пытаюсь запустить встроенный сервер solr, я получаю следующую ошибку.Solr: Всегда ищет ядро ​​с именем «collection1»

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 

Кажется, что он пытается найти ядро ​​Solr по имени collection1 по умолчанию.

обычай папка содержит

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

Я использую шаблон Spring Solr. Конфигурация EmbeddedServer приведена ниже.

@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"); 
    } 

Когда я изменить EmbeddedServer боб следующим образом (только изменяя путь ядра)

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

Я получаю ошибку ниже.

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 

Но когда я переименовать папку ядра, как collection1 и изменения основного имени в core.properties к name=collection1, все работает отлично.

Ниже мой schema.xml и 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 файл

name=newsportal 

EDIT

solr.xml файл

<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 версия: 4.10.4

Spring Solr версия данных: 1.5.5.BUILD-ПАНОРАМА

Я признателен за любую помощь, чтобы решить эту проблему вопрос.

ответ

0

взглянуть на этот адрес https://wiki.apache.org/solr/Solr.xml%20(supported%20through%204.x)

Чтобы включить поддержку динамического управления SolrCore, поместите файл с именем solr.xml в solr.home каталоге. Вот пример solr.xml файла:

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

Таким образом, изменение файла Solr.XML с соответствующей записью

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

Надеется, что это помогает

+0

Это говорит ** Запрещены в 4.4 и не поддерживается, как 5.0 см Solr.xml 4.4 и за **. Я использую solr 4.10.4 https://wiki.apache.org/solr/Solr.xml%204.4%20and%20beyond –

+0

Извините, я думал, что вы использовали версию до 4.4. –

+0

Я указал, что в моем вопросе. В любом случае, спасибо за ответ. (Y) –

1

К сожалению, нет чистого подхода, как сделать это, потому что collection1 является harcoded в EmbeddedSolrServerFactory классе (соответствующий Jira ticket).

Но я попробовал это Hacky один, и это работает для меня:

@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; 
} 
Смежные вопросы