2016-08-19 23 views
0

Apache solr 6.1.0を正常に実行しました。私も "Testcore"という名前の新しいコアを作成し、solr \ Testcoreフォルダに必要なすべてのファイルsolrconfig.xml、schema.xmlを追加しました。org.apache.solr.common.SolrException:ドキュメントに必須のIDがありませんuniqueKeyフィールド:id

今私はcsvファイルのインデックス作成のために、コマンドプロンプトで以下のコマンドを実行している:私は、コマンドプロンプトで次のエラー応答コードを取得しています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 

を:

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 

したがって、レスポンスコードでは、 "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、IDENTIFIER、AGENTID、AGENTNAME、EVENT_TIMESTAMP、MONTH、DAY、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アプリケーションを介してデータをインデックスする必要があります。私は、solr 4.10.1バージョンのために同じ文書に対して同じsolr索引付けを行っています。しかし、私はSolrバージョン6.1.0でそれを行うことができません。問題から私を助けてください。私はどこに行方不明ですか?前もって感謝します。 –

+0

その後、reloadコマンドを使用してコアをリロードしましたか? –

+1

ありがとうございました。私の問題は解決されました。これはスキーマファイルのバージョンの問題です。私はバージョン1.6で新しいファイルを使用して、それは私の問題を解決しました。ご協力ありがとうございました。今私は別の問題にこだわっているので、別の質問を投稿します。私を助けてください。 –

関連する問題