2015-01-24 4 views
0

Solr (버전 0.4.0.2002)을 사용하여 Solr (최신 버전 solr-4.10.3)을 구현하여 하나의 MVC 응용 프로그램을 개발 중입니다. Solr/SolrNet의 초보자이며 연습을 위해 http://crazorsharp.blogspot.in/2010/01/full-text-search-using-solr-lucene-and.html 자습서를 사용합니다. SolrNet.dll을 사용하여 인덱스로 데이터베이스 테이블 데이터를 인덱싱하는 동안 다음 오류가 발생합니다. SOLR 사이SolrNet 예외 : 문서가 누락되었습니다. uniqueKey 필드 : id

An exception of type 'SolrNet.Exceptions.SolrConnectionException' occurred in SolrNet.dll but was not handled in user code 

Additional information: <?xml version="1.0" encoding="UTF-8"?> 

<response> 
<lst name="responseHeader"> 
    <int name="status">400</int> 
    <int name="QTime">51</int> 
</lst> 
<lst name="error"> 
    <str name="msg">Document is missing mandatory uniqueKey field: id</str> 
    <int name="code">400</int> 
</lst> 
</response> 

의 schema.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<schema name="nopAccelerate" version="1.7"> 
    <types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" /> 
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" omitNorms="true"/> 
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="date" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/> 
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="nGramtext" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="back"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 
    </types> 
    <fields> 
    <field name="Id" type="int" indexed="true" stored="true" required="true" /> 
    <field name="FirstName" type="string" indexed="true" stored="true" required="false" /> 
    <field name="MiddleName" type="string" indexed="true" stored="false" required="false" /> 
    <field name="LastName" type="string" indexed="true" stored="false" required="false" /> 
    <field name="EmailId" type="string" indexed="true" stored="false" required="false" /> 
    <field name="MobileNumber" type="string" indexed="true" stored="false" required="false" /> 
    <field name="_version_" type="long" indexed="true" stored="true"/> 
    </fields> 
    <uniqueKey>Id</uniqueKey> 
    <defaultSearchField>FirstName</defaultSearchField> 
    <solrQueryParser defaultOperator="OR"/> 
</schema> 

core.properties

#Written by CorePropertiesLocator 
#Wed Jan 21 10:30:51 IST 2015 
name=mytestcore 
config=D\:\\SolrTest\\mytestcore\\conf\\solrconfig.xml 
schema=D\:\\SolrTest\\mytestcore\\conf\\schema.xml 
dataDir=D\:\\SolrTest\\mytestcore\\data 

EmpSolr.cs 매퍼 클래스, SQL & SolrNet

,
public class EmpSolr 
{ 
    [SolrUniqueKey("Id")] 
    public int Id { get; set; } 

    [SolrField("FirstName")] 
    public string FirstName { get; set; } 

    [SolrField("MiddleName")] 
    public string MiddleName { get; set; } 

    [SolrField("LastName")] 
    public string LastName { get; set; } 

    [SolrField("EmailId")] 
    public string EmailId { get; set; } 

    [SolrField("MobileNumber")] 
    public string MobileNumber { get; set; } 
} 

인덱서 클래스

public void IndexFiles() 
{ 
    //Startup.Init<EmpSolr>(this.solrUrl); 
    Startup.Init<EmpSolr>("http://localhost:8888/solr/#/mytestcore"); //chagned default port during installations 
    var solrWorker = ServiceLocator.Current.GetInstance<ISolrOperations<EmpSolr>>(); 

    var employees = new SolrRepository(this.connectionString).GetEmployees(); 
    solrWorker.Add(employees); 
    solrWorker.Commit(); 
} 

오류 로그 :

org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id 
    at org.apache.solr.update.AddUpdateCommand.getIndexedId(AddUpdateCommand.java:93) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:939) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:692) 
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:100) 
    at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:247) 
    at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:174) 
    at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:99) 
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) 
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1976) 
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

답변

0

그것은 내 실수였다. 코어와 매핑 할 잘못된 URL을 지정했습니다. 그래서, URL 내에서 # 추가 제거

Startup.Init<EmpSolr>("http://localhost:8888/solr/mytestcore"); 

Startup.Init<EmpSolr>("http://localhost:8888/solr/#/mytestcore"); 

을 변경했습니다.

관련 문제