SOLR Cell如何添加文档内容?

时间:2016-10-31 15:49:50

标签: solr solr-cell

SOLR有一个名为Cell的模块。它使用Tika从文档中提取内容并使用SOLR对其进行索引。

https://github.com/apache/lucene-solr/tree/master/solr/contrib/extraction的来源,我得出结论,Cell将原始提取的文本文档文本放入名为" content"的字段中。该字段由SOLR索引,但未存储。当您查询文档时,"内容"没有出现。

我的SOLR实例没有架构(我保留了默认架构)。

我尝试使用默认的%n(POST到va_start)来实现类似的行为。 POST请求:

UpdateRequestHandler

以这种方式添加文档后,内容字段将被编入索引并存储。它出现在查询结果中。我不想要它;这是浪费空间。

我对Cell添加文档的方式缺少什么?

2 个答案:

答案 0 :(得分:2)

如果您不希望您的字段存储内容,则必须将字段设置为stored =" false"。

由于您正在使用无模式模式(仍然存在模式,它只是在添加新字段时动态生成),您必须使用Schema API来改变这个领域。

你可以do this by issuing a replace-field command

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "replace-field":{
  "name":"content",
  "type":"text",
  "stored":false }
}' http://localhost:8983/solr/collection/schema

您可以针对/collection/schema/fields发出请求see the defined fields

答案 1 :(得分:0)

Cell代码确实将内容添加到文档content,但是内置的字段翻译规则将content替换为_text_。在无模式SOLR中,_text_被标记为不存储。

该规则由SolrContentHandler.addField()中的以下行调用:

String name = findMappedName(fname);

在params对象中,fmap.content应被视为_text_的规则。它来自corename\conf\solrconfig.xml,默认情况下会出现以下片段:

<requestHandler name="/update/extract"
              startup="lazy"
              class="solr.extraction.ExtractingRequestHandler" >
  <lst name="defaults">
    <str name="lowernames">true</str>
    <str name="fmap.meta">ignored_</str>
    <str name="fmap.content">_text_</str> <!-- This one! -->
  </lst>
</requestHandler>

同时,在corename \ conf \ managed_schema中有一行:

<field name="_text_" type="text_general" multiValued="true" indexed="true" stored="false"/>

这就是整个故事。