当前位置: 首页 > 知识库问答 >
问题:

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

裴威
2023-03-14

我对使用Solr是新手,我制作了一个新的核心并复制了默认的模式。xml到conf文件夹。我所做的更改非常微不足道。

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

如您所见,我将id字段设置为存储=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个答案

胡曾笑
2023-03-14

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

当指定为搜索查询返回所有字段(例如“fl=*”)时,非存储的docValures字段也将与其他存储的字段一起返回,具体取决于每个字段的useDocValuesAsStored参数的有效值。对于架构版本

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

您可以将usedocvaluesassstored=“false”参数添加到字段中,也可以使用其他字段类型,例如text\u general。

景靖琪
2023-03-14

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

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

 类似资料:
  • 我有两个内核运行在同一个tomcat实例上。我的要求是类似于以下内容: 1。对于单个Solr查询,从Core1返回field1、field2和从Core2返回field3、field4。我需要将所有四个字段作为一条记录返回。 请为我提供一些帮助,以实现这一点在Solr。

  • 在Solr围绕原子更新的文档中,他们提到一个字段应该是非索引和非存储的。 https://lucene.apache.org/solr/guide/7_6/updating-parts-of-documents.html#in-place-update-example 只有当要更新的字段满足以下三个条件时,才使用该方法执行原子更新操作: 是非索引(indexed=“false”)、非存储(stor

  • 我有Solr 5.3.1,需要查询除某些字段之外的所有字段(我需要在某些字段中搜索而不是以这种方式检索字段[/?q=query&fl=field1,field2,field3]) 2.[以下解决方案有效,但需要更多时间] 3.我在data-config.xml中设置了indexed=“false”,它只忽略此字段中的搜索,但是当我搜索所有字段http://localhost:8983/solr/t

  • 问题内容: 我必须从数据库中提取客户列表,但是如果第二个地址字段为空,我想显示文本“ None Provided”。这是我的查询: 如果地址2为空白,我想显示“无提供”。我怎么做?我敢肯定答案非常简单,但是我脑子屁,在任何地方都找不到答案。 好的,这就是我最终要进行的工作: 有没有更好的方法来实现这一目标? 问题答案: 您可以使用: 甚至更好: 如果数据包含空字符串或null,那么我将考虑使用:

  • 问题内容: 我命中了要通过自定义开发层进行Solr的查询,而我在该层中超时的一些查询仍在solr实例中。solr中是否有一个可用于使特定查询超时的参数 问题答案: 如Solr中所述,客户端断开连接后查询继续吗?并写在Solr常见问题解答中 在内部,Solr不会使任何请求超时-它使更新和查询都需要花费很长时间才能完全处理。 但是在FAQ的同一位置 但是,用于运行Solr的servlet容器可能会对所

  • 我用spring boot starter创建了一个基本的graphql java应用程序,并在使用Hibernate和Jpa的MSSQL数据库上使用graphql spqr库。 我有一个名为“任务”的实体,有5个字段。我有一个简单的Jpa存储库和一个调用“findAllTasks”方法的简单Jpa服务。它工作得很好,但是如果我指定(例如)使用graphiql只查询一个字段,我可以通过SQL日志看