0

たとえば solr にファイル (いくつかの ms word ドキュメント) をアップロードしたいのですが、アップロードした人の userId やタグの数など、このアップロードに独自のフィールドを追加したいと思います。ファイルのコンテンツは解析および検索可能である必要があり、exta パラメータはフィールドとして追加する必要があります。そのため、schema.xml に次の定義を追加しました。

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.1">
  <types>
   <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
   <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
    <!-- A general text field that has reasonable, generic
         cross-language defaults: it tokenizes with StandardTokenizer,
     removes stop words from case-insensitive "stopwords.txt"
     (empty by default), and down cases.  At query time only, it
     also applies synonyms. -->
    <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" enablePositionIncrements="true" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <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>
 </types>


 <fields>
    <field name="documentId" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="text" type="string" indexed="true" stored="false" multiValued="true"/>
<dynamicField name="metadata_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
 </fields>

 <uniqueKey>documentId</uniqueKey>
 <defaultSearchField>text</defaultSearchField>
 <solrQueryParser defaultOperator="AND"/>

</schema>

私の solrconfig.xml の関連部分は次のようになります。

  <equestHandler name="/update/extract" 
                startup="lazy"
                class="solr.extraction.ExtractingRequestHandler">
 <lst name="defaults">
   <str name="fmap.content">text</str>
   <str name="lowernames">true</str>
   <str name="fmap.documentId">documentId</str>
   <!-- also tried with
   <str name="fmap.literal.documentId">documentId</str>
   and
   <str name="literal.documentId">documentId</str>
   -->
   <str name="uprefix">metadata_</str>

   <!-- capture link hrefs but ignore div attributes -->
   <str name="captureAttr">true</str>
   <str name="fmap.a">links</str>
   <str name="fmap.div">ignored_</str>
  </lst>
  </requestHandler>

ただし、このコマンドでどのような組み合わせを試しても:

java -Durl=http://localhost:9090/solr/update/extract?documentId=test -jar post.jar somedoc.pdf

また

java -Durl=http://localhost:9090/solr/update/extract?literal.documentId=test -jar post.jar somedoc.pdf

documentId の必須フィールドが欠落し続けています

よろしくロナルド

4

2 に答える 2

2

ドキュメントが 0 である理由は、おそらく documentId (またはその他の必要なフィールド) を指定していないため、インデックス作成が失敗しています (ログを参照してください)。

以下の例を参照してください: http://wiki.apache.org/solr/ExtractingRequestHandler#Getting_Started_with_the_Solr_Example

Tika でインデックス付けされたドキュメントにフィールドを追加するには、リテラルパラメーターを使用する必要があります。あなたの場合、次のようになります。

&literal.userId=123&literal.documentId=doc1

他に質問がある場合は、質問してください (詳細を追加する可能性があります: コマンドがどのように見えるか、ログからのエラー)

于 2012-08-06T13:19:33.737 に答える
0

同じ問題があり、問題はフィールド「documentId」の名前でした。フィールド名が「Id」(大文字の I)で終わる場合、必須フィールドのチェックに問題があることがわかりました

私がそれを理解するのに役立ったこの他の質問を参照してください:Solr - Missing Required Field

フィールド名を「id」に変更しましたが、すべて問題ありません。これは本当に意味がなく、おそらく何人かの人々を完全に夢中にさせました

于 2013-01-03T19:56:30.490 に答える