我是Solr的新手,我需要实现一些PDF文件的全文搜索。索引部分使用bin/post
开箱即用。我可以在给定一些查询的管理UI中看到搜索结果,但没有匹配的文本和上下文。
现在我正在阅读this post以获取突出显示部分。当托管架构不可用时,它适用于较旧版本的Solr。在完全理解它在做什么之前,我有一些问题:
<field name="content" type="text_general" indexed="false" stored="true" multiValued="false"/> <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
但为什么需要两个字段?我可以定义一个字段
<field name="content" type="text_general" indexed="true" stored="true" multiValued="true"/>
捕获全文?
TikaEntityProcessor
's documentation中没有看到相关信息。当前的文本提取器应该已经是Tika(我可以看到"x_parsed_by": ["org.apache.tika.parser.DefaultParser","org.apache.tika.parser.pdf.PDFParser"]
在一些查询的返回JSON中)。但即使我定义了字段,他说我在搜索结果中看不到它们作为JSON中的键。
_text_
字段似乎是其他字段的串联,是否包含全文?虽然默认情况下似乎无法访问。简而言之,以The Elements of Statistical Learning为例,如何突出显示查询的相关文本&#34; SVM&#34;?如果将文件名改为&#34;统计学习要素 - Trevor Hastie.pdf&#34;并发布,如何突出&#34; Trevor Hastie&#34;查询&#34; id:Trevor Hastie&#34;?
答案 0 :(得分:2)
在我开始讨论问题之前,让我简单介绍一下solr的工作原理。 Solr在其核心使用lucene时,简单地说就是匹配引擎。它使用短语创建文档的反向索引。这意味着每个短语都有一个文件列表,这使得它如此之快。回答你的问题:
Solr不会将您的pdf转换为文本,也不会将处理器中配置的更新处理器转换为文本,再次将其配置为solrconfig.xml或编写您自己的处理程序here。 回来为什么有两个领域。简单地说,第一个(内容)是存储数据的存储字段。第二个是copyfield,它根据schema.xml中的配置复制每个文档的数据。
我们这样做是因为我们可以选择索引策略,例如我们在文本字段中添加一个小写过滤器工厂,以便所有内容都以小写形式编制索引。然后&#34; Sam&#34;和&#34; sam&#34;搜索时返回相同的结果。或删除某些常见的单词,如&#34; a&#34;,&#34;&#34;这将不必要地增加您的索引大小。当您处理数百万条记录时会占用大量内存,那么您需要小心索引哪些字段以便更好地利用资源。 字段&#34;文字&#34;是一个copyfield,它将模式中提到的某些字段的数据复制到文本字段。然后,在搜索时,不需要为每个字段触发多个查询。因为所有东西都被复制到&#34; text&#34;字段,你得到的结果。这就是它多次使用的原因&#34;。因为它可以存储一组数据。内容是一个存储的字段,文本不是,而且与索引相反,因为当您将结果返回给最终用户时,您会向他显示您保存的内容,而不是您刚刚使用多个过滤器的文本字段所做的精简数据(例如删除停用词并应用案例过滤器,阻止等)。
这就是你没有看到&#34; text&#34;搜索结果中的字段,因为这是使用solr。 要突出显示,请参阅this。
希望这会有所帮助。 :)