2016-08-19 4 views
0

Apache solr 6.1.0을 성공적으로 실행했습니다. 또한 "Testcore"라는 새 코어를 작성하고 solr \ Testcore 폴더에 필요한 모든 파일 solrconfig.xml, schema.xml을 추가했습니다.org.apache.solr.common.SolrException : 문서에 필수 uniqueKey가 누락되었습니다. 필드 : id

지금은 csv 파일 색인에 대한 명령 프롬프트에서 명령을 다음 실행 한 :

SimplePostTool version 5.0.0 
Posting files to [base] url http://localhost:8983/solr/Testcore/update/csv usin 
g content-type text/csv... 
POSTing file TestInsert-08-16-2016-15-47-solr.csv to [base] 
SimplePostTool: WARNING: Solr returned an error #400 (Bad Request) for url: http 
://localhost:8983/solr/Testcore/update/csv 
SimplePostTool: WARNING: Response: <?xml version="1.0" encoding="UTF-8"?> 
<response> 
<lst name="responseHeader"><int name="status">400</int><int name="QTime">27</int 
></lst><lst name="error"><lst name="metadata"><str name="error-class">org.apache 
.solr.common.SolrException</str><str name="root-error-class">org.apache.solr.common.SolrException</str></lst><str name="msg">Document is missing mandatory uniqueKey field: id</str><int name="code">400</int></lst> 
</response> 
SimplePostTool: WARNING: IOException while reading response: java.io.IOException 
: Server returned HTTP response code: 400 for URL: http://localhost:8983/solr/Testcore/update/csv 
1 files indexed. 
COMMITting Solr index changes to http://localhost:8983/solr/Testcore/update/csv 
... 
Time spent: 0:00:00.073 

: 내가 명령 프롬프트에서 오류 응답 코드 다음 무엇입니까 csv 파일을 색인하면서 이제

C:\>java -Durl=http://localhost:8983/solr/Testcore/update/csv -Dtype=text/csv -jar C:\solr-6.1.0\server\lib/post.jar C:\messages\TestInsert-08-16-2016-15-47-solr.csv 

을 그래서 응답 코드에서 "Document is mandatory uniqueKey field : id"라는 오류 메시지를 반환합니다. 또한 오류로 인해 solr 사이트에서 데이터의 색인이 생성되지 않습니다.

내의 schema.xml 파일 :

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

<schema name="example" version="1.5"> 

    <field name="_version_" type="long" indexed="true" stored="true"/> 


    <field name="_root_" type="string" indexed="true" stored="false"/> 


    <field name="id" type="string" indexed="true" stored="true" required="true" /> 


    <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/> 
    <field name="name" type="text_general" indexed="true" stored="true"/> 
    <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/> 
    <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/> 
    <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/> 
    <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" /> 

    <field name="weight" type="float" indexed="true" stored="true"/> 
    <field name="price" type="float" indexed="true" stored="true"/> 
    <field name="popularity" type="int" indexed="true" stored="true" /> 
    <field name="inStock" type="boolean" indexed="true" stored="true" /> 

    <field name="store" type="location" indexed="true" stored="true"/> 


    <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> 
    <field name="subject" type="text_general" indexed="true" stored="true"/> 
    <field name="description" type="text_general" indexed="true" stored="true"/> 
    <field name="comments" type="text_general" indexed="true" stored="true"/> 
    <field name="author" type="text_general" indexed="true" stored="true"/> 
    <field name="keywords" type="text_general" indexed="true" stored="true"/> 
    <field name="category" type="text_general" indexed="true" stored="true"/> 
    <field name="resourcename" type="text_general" indexed="true" stored="true"/> 
    <field name="url" type="text_general" indexed="true" stored="true"/> 
    <field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/> 
    <field name="last_modified" type="date" indexed="true" stored="true"/> 
    <field name="links" type="string" indexed="true" stored="true" multiValued="true"/> 


    <!-- Testcore spcific fields --> 


<field name="SRNO" type="int" indexed="true" stored="true"/> 
<field name="IDENTIFIER" type="string" indexed="true" stored="true"/> 
<field name="AGENTID" type="string" indexed="true" stored="true"/> 
<field name="AGENTNAME" type="string" indexed="true" stored="true"/> 

<field name="event_timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/> 
<field name="MONTH" type="string" indexed="true" stored="true"/> 
<field name="DAY" type="string" indexed="true" stored="true"/> 
<field name="TIMESTAMP" type="string" indexed="true" stored="true"/> 
<field name="TYPE" type="string" indexed="true" stored="true"/> 
<field name="TASKID" type="string" indexed="true" stored="true"/> 

<!-- End of Testcore fields-----> 

    <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/> 
    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 
    <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/> 
    <field name="manu_exact" type="string" indexed="true" stored="false"/> 
    <field name="payloads" type="payloads" indexed="true" stored="true"/> 

    <dynamicField name="*_i" type="int" indexed="true" stored="true"/> 
    <dynamicField name="*_is" type="int" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_s" type="string" indexed="true" stored="true" /> 
    <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_l" type="long" indexed="true" stored="true"/> 
    <dynamicField name="*_ls" type="long" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_t" type="text_general" indexed="true" stored="true"/> 
    <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> 
    <dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_f" type="float" indexed="true" stored="true"/> 
    <dynamicField name="*_fs" type="float" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_d" type="double" indexed="true" stored="true"/> 
    <dynamicField name="*_ds" type="double" indexed="true" stored="true" multiValued="true"/> 

    <!-- Type used to index the lat and lon components for the "location" FieldType --> 
    <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" /> 

    <dynamicField name="*_dt" type="date" indexed="true" stored="true"/> 
    <dynamicField name="*_dts" type="date" indexed="true" stored="true" multiValued="true"/> 
    <dynamicField name="*_p" type="location" indexed="true" stored="true"/> 

    <!-- some trie-coded dynamic fields for faster range queries --> 
    <dynamicField name="*_ti" type="tint" indexed="true" stored="true"/> 
    <dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/> 
    <dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/> 
    <dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/> 
    <dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/> 

    <dynamicField name="*_c" type="currency" indexed="true" stored="true"/> 

    <dynamicField name="ignored_*" type="ignored" multiValued="true"/> 
    <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/> 

    <dynamicField name="random_*" type="random" /> 




<!-- Field to use to determine and enforce document uniqueness. 
     Unless this field is marked with required="false", it will be a required field 
    --> 
    <uniqueKey>id</uniqueKey> 


    <copyField source="cat" dest="text"/> 
    <copyField source="name" dest="text"/> 
    <copyField source="manu" dest="text"/> 
    <copyField source="features" dest="text"/> 
    <copyField source="includes" dest="text"/> 
    <copyField source="manu" dest="manu_exact"/> 

    <!-- Copy the price into a currency enabled field (default USD) --> 
    <copyField source="price" dest="price_c"/> 

    <!-- Text fields from SolrCell to search by default in our catch-all field --> 
    <copyField source="title" dest="text"/> 
    <copyField source="author" dest="text"/> 
    <copyField source="description" dest="text"/> 
    <copyField source="keywords" dest="text"/> 
    <copyField source="content" dest="text"/> 
    <copyField source="content_type" dest="text"/> 
    <copyField source="resourcename" dest="text"/> 
    <copyField source="url" dest="text"/> 

    <!-- Create a string version of author for faceting --> 
    <copyField source="author" dest="author_s"/> 

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 
    <fieldType name="uuid" class="solr.UUIDField" indexed="true" /> 

    <!-- boolean type: "true" or "false" --> 
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/> 


    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/> 


    <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/> 
    <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/> 
    <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/> 
    <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/> 


    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/> 

    <!-- A Trie based date field for faster date range queries and date faceting. --> 
    <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/> 


    <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings --> 
    <fieldtype name="binary" class="solr.BinaryField"/> 


    <fieldType name="random" class="solr.RandomSortField" indexed="true" /> 



    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.ManagedStopFilterFactory" managed="english" /> 
     <filter class="solr.ManagedSynonymFilterFactory" managed="english" /> 
     </analyzer> 
    </fieldType> 


    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 

     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

     <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 

    <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="lang/stopwords_en.txt" 
       /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 

     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="lang/stopwords_en.txt" 
       /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 

     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 


    <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
     <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="lang/stopwords_en.txt" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="lang/stopwords_en.txt" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
     <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.EnglishMinimalStemFilterFactory"/> 

     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" 
      maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 


    <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
     <analyzer> 
     <!-- KeywordTokenizer does no actual tokenizing, so the entire 
      input string is preserved as a single token 
      --> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <!-- The LowerCase TokenFilter does what you expect, which can be 
      when you want your sorting to be case insensitive 
      --> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <!-- The TrimFilter removes any leading or trailing whitespace --> 
     <filter class="solr.TrimFilterFactory" /> 

     <filter class="solr.PatternReplaceFilterFactory" 
       pattern="([^a-z])" replacement="" replace="all" 
     /> 
     </analyzer> 
    </fieldType> 

    <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" > 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/> 
     </analyzer> 
    </fieldtype> 

    <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" > 
     <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 

     <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/> 
     </analyzer> 
    </fieldtype> 

    <!-- lowercases the entire field value, keeping it as a single token. --> 
    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
    </fieldType> 


    <fieldType name="descendent_path" class="solr.TextField"> 
     <analyzer type="index"> 
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" /> 
     </analyzer> 
     <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory" /> 
     </analyzer> 
    </fieldType> 

    <fieldType name="ancestor_path" class="solr.TextField"> 
     <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" /> 
     </analyzer> 
    </fieldType> 

    <!-- since fields of this type are by default not stored or indexed, 
     any data added to them will be ignored outright. --> 
    <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" /> 

    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> 

    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. --> 
    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> 

    <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" 
     geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" /> 

    <fieldType name="bbox" class="solr.BBoxField" 
     geo="true" units="degrees" numberType="_bbox_coord" /> 
    <fieldType name="_bbox_coord" class="solr.TrieDoubleField" precisionStep="8" docValues="true" stored="false"/> 


    <fieldType name="currency" class="solr.CurrencyField" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" /> 


</schema> 

그리고 csv 파일에서이 필드를 다음 SRNO, 식별자는 AGENTID는 AGENTNAME는 event_timestamp는, 월, 일, TIMESTAMP, TYPE은 TASKID 이 필드에 추가 schema.xml 파일의 데이터 유형

이 문제로 나를 도와주세요. 미리 감사드립니다.

+0

글쎄 - 'id'라는 CSV 데이터에 필드가 있습니까? 그렇지 않은 경우 uniqueKey로 정의 된 필드를 변경하거나 각 필드에 ID를 제공해야합니다. – MatsLindh

+0

@MathLindh : 빠른 응답에 감사드립니다. 내 CSV 데이터 파일에는 id라는 필드가 없습니다. 당신의 제안에 따라 각 필드에 ID를 어떻게 제공합니까? –

+0

CSV 파일에 고유 한 값이있는 경우 직접 입력해도됩니다. 모든 행에 임의의 UUID를 고유 키로 할당하는 업데이트 프로세서를 추가 할 수 있습니다. http://lucene.apache.org/solr/5_5_0/solr-core/org/apache/solr/update/processor/UUIDUpdateProcessorFactory.html – MatsLindh

답변

1

id로 선언 된 uniqueKey 필드를 schema.xml 파일 맨 위에서 제거하면됩니다. 또한 id 필드에서 required = true 속성을 제거하십시오. 다른 필드를 문서의 고유 키로 사용하십시오.

+0

나는 당신이 제안한 똑같은 일을했습니다. 하지만 여전히 같은 문제에 직면하고 있습니다. 실제로 내 문서에는 고유 한 키 필드가 없지만 여전히 내 solr 응용 프로그램을 통해 데이터를 인덱싱해야합니다. 솔루 4.10.1 버전의 동일한 문서에 대해 동일한 솔라 색인을 수행했습니다. 그러나 Solr 버전 6.1.0에서는이 작업을 수행 할 수 없습니다. 제발 나를 도와주세요. 내가 어디없는거야? 미리 감사드립니다. –

+0

reload 명령을 사용하여 코어를 다시로드 했습니까? –

+1

고마워. 내 문제가 해결되었습니다. 스키마 파일 버전 문제입니다. 나는 "1.6"버전으로 새 파일을 사용하고 내 문제를 해결했습니다. 도와 줘서 고마워. 지금 나는 다른 문제에 갇혔다. 다른 문제를 게시 할 것이다. 제발 도와주세요. –

관련 문제