我已经在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中查看文本,这是BOMHRINGER XMl响应的一部分。
答案 0 :(得分:1)
检查field mapping属性。
文件的内容通常映射到文本字段,默认情况下不存储
检查ExtractingRequestHandler,默认情况下文件内容为fmap.content=text
,可以覆盖
如果您只想查看突出显示的查询内容,可以使用solr的highlight功能。
对于文档的标题,您需要在索引文档时传递标题,或者Tika应该提供内置文件名字段作为您可以使用的元数据字段。
答案 1 :(得分: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被搜查,那么我想要我的部分resposne是“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"/>