2012-04-21 12 views
2

私はSolrで初めて遊んでいます。 Ubuntu Serverにインストールして実行し、exampledocsディレクトリにあるサンプルxmlドキュメントを投稿し、サンプルファイルにある "monitor"、 "apple"、 "Dell"などのキーワードを検索できました。Apache Solrで独自のフィールドを作成してドキュメントをアップロードするには?

今、カスタムフィールドを持つ独自のドキュメントを追加します。私は自分のカスタムものとschema.xmlファイル内のフィールドを置き換え

<add><doc> 
    <field name="id">3007WFP</field> 
    <field name="name">Dell Widescreen UltraSharp 3007WFP</field> 
    <field name="manu">Dell, Inc.</field> 
    <field name="cat">electronics</field> 
    <field name="cat">monitor</field> 
    <field name="features">30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</field> 
    <field name="includes">USB cable</field> 
    <field name="weight">401.6</field> 
    <field name="price">2199</field> 
    <field name="popularity">6</field> 
    <field name="inStock">true</field> 
    <!-- Buffalo store --> 
    <field name="store">43.17614,-90.57341</field> 
</doc></add> 

:のように見えた

<fields> 
    <!-- Valid attributes for fields: 
    name: mandatory - the name for the field 
    type: mandatory - the name of a previously defined type from the 
     <types> section 
    indexed: true if this field should be indexed (searchable or sortable) 
    stored: true if this field should be retrievable 
    multiValued: true if this field may contain multiple values per document 
    omitNorms: (expert) set to true to omit the norms associated with 
     this field (this disables length normalization and index-time 
     boosting for the field, and saves some memory). Only full-text 
     fields or fields that need an index-time boost need norms. 
     Norms are omitted for primitive (non-analyzed) types by default. 
    termVectors: [false] set to true to store the term vector for a 
     given field. 
     When using MoreLikeThis, fields used for similarity should be 
     stored for best performance. 
    termPositions: Store position information with the term vector. 
     This will increase storage costs. 
    termOffsets: Store offset information with the term vector. This 
     will increase storage costs. 
    default: a value that should be used if no value is specified 
     when adding a document. 
    --> 

    <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="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false"/> 
    <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" /> 

    <!-- 
    The following store examples are used to demonstrate the various ways one might _CHOOSE_ to 
    implement spatial. It is highly unlikely that you would ever have ALL of these fields defined. 
    --> 
    <field name="store" type="location" indexed="true" stored="true"/> 

    <!-- Common metadata fields, named specifically to match up with 
    SolrCell metadata when parsing rich documents such as Word, PDF. 
    Some fields are multiValued only because Tika currently may return 
    multiple values for them. 
    --> 
    <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="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"/> 

    <!-- catchall field, containing all other searchable text fields (implemented 
     via copyField further on in this schema --> 
    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

    <!-- catchall text field that indexes tokens both normally and in reverse for efficient 
     leading wildcard queries. --> 
    <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/> 

    <!-- non-tokenized version of manufacturer to make it easier to sort or group 
     results by manufacturer. copied from "manu" via copyField --> 
    <field name="manu_exact" type="string" indexed="true" stored="false"/> 

    <field name="payloads" type="payloads" indexed="true" stored="true"/> 

    <!-- Uncommenting the following will create a "timestamp" field using 
     a default value of "NOW" to indicate when each document was indexed. 
    --> 
    <!-- 
    <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/> 
    --> 

    <!-- Dynamic field definitions. If a field name is not found, dynamicFields 
     will be used if the name matches any of the patterns. 
     RESTRICTION: the glob-like pattern in the name attribute must have 
     a "*" only at the start or the end. 
     EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i) 
     Longer patterns will be matched first. if equal size patterns 
     both match, the first appearing in the schema will be used. --> 
    <dynamicField name="*_i" type="int" indexed="true" stored="true"/> 
    <dynamicField name="*_s" type="string" indexed="true" stored="true"/> 
    <dynamicField name="*_l" type="long" indexed="true" stored="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="*_f" type="float" indexed="true" stored="true"/> 
    <dynamicField name="*_d" type="double" indexed="true" stored="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="*_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="*_pi" type="pint" 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" /> 

    <!-- uncomment the following to ignore any fields that don't already match an existing 
     field name or dynamic field, rather than reporting them as an error. 
     alternately, change the type="ignored" to some other type e.g. "text" if you want 
     unknown fields indexed and/or stored by default --> 
    <!--dynamicField name="*" type="ignored" multiValued="true" /--> 

</fields> 

とデフォルトの例ファイル:これがscheme.xmlではデフォルトであったものです。

<add> 
    <doc> 
     <field name="user_id">foobar</field> 
     <field name="about">I am a somebody</field> 
     <field name="music">pop, rock</field> 
     <field name="movies">titanic</field> 
     <field name="occupation">web developer</field> 
    </doc> 
</add> 
01:
<fields> 
    <field name="user_id" type="string" indexed="true" stored="true" /> 
    <field name="about" type="string" indexed="true" stored="true" /> 
    <field name="music" type="string" indexed="true" stored="true" /> 
    <field name="movies" type="string" indexed="true" stored="true" /> 
    <field name="occupation" type="string" indexed="true" stored="true" /> 
</fields> 

はこのdocという名前mydoc.xmlを投稿してみました

私は同じ古いコマンドを使用して投稿しようとしたとき:

java -jar post.jar mydoc.xml 

は、これは私が受信したエラーです:

SimplePostTool: version 1.4 
SimplePostTool: POSTing files to http://localhost:8983/solr/update.. 
SimplePostTool: POSTing file mydoc.xml 
SimplePostTool: FATAL: Solr returned an error #400 ERROR: [doc=null] unknown field 'user_id' 

私も、私はSolrのサービスを再起動する場合、それはSolrの管理者をロードするために失敗したことに気づきました、メッセージを与える:他のJavaタイプのエラーの束に続く

HTTP ERROR 500 

Problem accessing /solr/admin/. Reason: 

    Severe errors in solr configuration. 

Check your log files for more detailed information on what may be wrong. 

If you want solr to continue after configuration errors, change: 

<abortOnConfigurationError>false</abortOnConfigurationError> 

in solr.xml 

を...

schema.xmlから独自のカスタムフィールドを削除してSolrを再起動した場合、Solr Adminが正常にロードされます。

私はここで紛失しています。自分のカスタムフィールドを追加して、自分のドキュメントをSolrに投稿できるようにするにはどうすればいいですか?であることを

<uniqueKey>id</uniqueKey> 

<uniqueKey>user_id</uniqueKey> 

のschema.xmlの下部に

+0

schema.xmlにuser_idという名前のフィールドはありません。 – bmargulies

+0

@bmarguliesはい、私は、私がschema.xmlのデフォルトのフィールドを置き換えた部分を投稿した部分を見てください。 – TK123

+0

あなたの実行中のインスタンスにはない、そうしなかった、あるいはそのエラーを受け取らないでしょう。 – bmargulies

答えて

2

問題だった、私はこれを更新することを忘れていました。もう1つの問題は、Solrの管理者で*:*を使用して検索したときにすべて問題なく、文字列(キーワード)で検索したときにundefined field textというエラーが発生しました。これを修正するには、これを自分のフィールドの1つとして追加する必要がありました。

<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 
関連する問題