0

我在 solr 中索引了一个 pdf,当我查询一个名为 BOEHRINGER 的文本时,我的 xml 响应如下

<response>
  <lst name="responseHeader">
     <int name="status">0</int>
     <int name="QTime">1</int>
     <lst name="params">
        <str name="q">text:BOEHRINGER</str>
     </lst>
  </lst>
 <result name="response" numFound="1" start="0">
     <doc>
        <str name="author">cjessen</str>
        <arr name="content_type">
             <str>application/pdf</str>
        </arr>
        <str name="id">2</str>
        <date name="last_modified">2012-05-07T17:09:32Z</date>
     </doc>
 </result>
 </response>

如何获取要返回的内容以及作为 XML 响应一部分的文件名?应该将什么字段添加到 schema.xml 以便我可以查看 pdf 中围绕我搜索的单词的文本,该单词是 XMl 响应的 BOEHRINGER 部分。

4

2 回答 2

1

检查字段映射属性。

文件的内容通常映射到文本字段,默认情况下不存储。
检查ExtractingRequestHandler,默认是fmap.content=text可以覆盖的文件内容。
如果您只想检查突出显示查询的内容,可以使用 solr 的突出显示功能。

对于文档的标题,您需要在索引文档时传递标题,或者应该有一个由 Tika 提供的内置文件名字段作为您可以使用的元数据字段。

于 2013-03-19T03:50:27.470 回答
0
   <!-- Solr Cell Update Request Handler

   http://wiki.apache.org/solr/ExtractingRequestHandler 

    -->
 <requestHandler name="/update/extract" 
               startup="lazy"
               class="solr.extraction.ExtractingRequestHandler" >
     <lst name="defaults">
  <!-- All the main content goes into "text"... if you need to return
       the extracted text or do highlighting, use a stored field. -->
          <str name="fmap.content">text</str>
          <str name="lowernames">true</str>
          <str name="uprefix">ignored_</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>

这是我的 solrconfig.xml 文件。schema.xml 文件中的所有字段都已编入索引并存储 =true。我仍在尝试获取我的回复的文本部分,然后是它周围的单词。如果搜索了 sanjay,那么我希望我的部分回复是“Sanjay 身高 6 英尺”,以及“sanjay 是个好孩子”。假设这两个句子都存在于被索引的文件中。

   <fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
                    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
                            generateNumberParts="1" catenateWords="1"
                            catenateNumbers="1" catenateAll="0"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
                    <filter class="solr.EnglishPorterFilterFactory"
                             protected="protwords.txt"/>
                    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
     </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="stopwords.txt"/>
                    <filter class="solr.WordDelimiterFilterFactory" enerateWordParts="1"
                             generateNumberParts="1" catenateWords="0"
                            catenateNumbers="0" catenateAll="0"/>
                    <filter class="solr.LowerCaseFilterFactory"/>
                    <filter class="solr.EnglishPorterFilterFactory"        protected="protwords.txt"/>
                    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
</fieldtype>

  And the field is  <field name="text" type="text_general" indexed="true" stored="true"      multiValued="true"/>
于 2013-03-22T07:12:07.837 回答