Solr中的存储字段会显示在查询中,为什么?

时间:2015-09-12 04:42:19

标签: solr solr-query-syntax

我是使用Solr的新手,我创建了一个新核心并将默认schema.xml复制到conf/文件夹。我所做的改变非常简单。

<field name="id" type="string" indexed="true" stored="false" required="true" multiValued="false" /> 

如您所见,我将id字段设置为 stored = false 。根据我的理解,当我进行查询搜索时,现在不应显示字段id。但那并没有发生。我尝试重新启动solr实例,并进行查询以再次索引文件。

curl 'http://localhost:8983/solr/TwitterCore/update/json?commit=true' 
  --data-binary @$(echo TwitterData_Core_Conf/TwitterText_en_demo.json) 
  -H 'Content-type:application

根据Solr Wiki,这应该重新索引我的文件。但是,当我再次运行查询时,我仍然会看到Id

返回的文档示例(这不是完整的JSON节点,我只是复制了一些部分):

"text": [
      "RT @FollowTrainTV: Moonseternity just joined #FollowTrainTV - Watch them stream on http://t.co/oMcOGA51kT"
    ],
    "lang": [
      "en"
    ],
    "id": "0a8edfea-68f7-4b05-b370-27b5aba640b7", // I dont want to see this
    "_version_": 1512067627994841000

也许有人可以给我详细的重新索引步骤。

2 个答案:

答案 0 :(得分:0)

更改schema.xml文件并重新启动solr-server时,更改仅适用于新文档。这意味着您必须清除索引并重新索引所有文档(除了查询标记生成器,这些更改在服务器重新启动后立即生效,但这不是这种情况)。重新编制索引后,id字段不应再显示。

另一句话:你不必用curl测试你的查询。当您使用网络浏览器连接到http://localhost:8983/solr时,您应该在那里找到管理界面。在那里,您可以选择核心并测试您的查询。

答案 1 :(得分:0)

请参阅此https://lucene.apache.org/solr/guide/6_6/docvalues.html文档。

  

未存储的docValues字段也将与其他字段一起返回   当所有字段都为   指定要针对搜索查询返回的值(例如“ fl = *”),具体取决于   useDocValuesAsStored参数对每个参数的有效值   领域。对于架构版本> = 1.6,隐式默认值为   useDocValuesAsStored =“ true”。

String字段类型具有docValues =“ true”。这就是它出现在搜索响应中的原因。

您可以将useDocValuesAsStored =“ false”参数添加到该字段,也可以使用其他fieldType,例如text_general。