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

Stored fields in Solr are getting displayed in queries , why?

我刚开始使用 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

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

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

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

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

Non-stored docValues fields will be also returned along with other stored fields when all fields are specified to be returned (e.g. “fl=*”) for search queries depending on the effective value of the useDocValuesAsStored parameter for each field. For schema versions >= 1.6, the implicit default is useDocValuesAsStored="true".

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

您可以将 useDocValuesAsStored="false" 参数添加到该字段,也可以使用不同的字段类型,比如 text_general。