如何在 str 而不是 arr 中获取 solr 结果的文档字段?

How to get solr result's doc fields in str rather than arr?

我做了一个索引,secondCore {id, resid, title, name, cat, role, exp}。当我执行查询时,doc 中的结果字段作为数组 (<arr name="fid"><long>6767</long></arr>) 返回,但我希望它是字符串,因为它在 ID (<str name="id">1</str>) 中返回。

我可以在哪里进行更改?我有多个内核,每个内核都有单独的 schema.xml,(比如 server/solr/firstCore/conf/fcschema.xmlserver/solr/secondCore/conf/scschema.xml)。在每个核心的 core.properties 中,我将模式文件名写为 schema=fcschema.xml

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">1</int>
  <lst name="params">
    <str name="indent">true</str>
    <str name="q">status:inbox</str>
    <str name="_">1444301939167</str>
    <str name="wt">xml</str>
  </lst>
</lst>
<result name="response" numFound="3" start="0">
  <doc>
    <str name="id">1</str>
    <arr name="fid">
      <long>6767</long>
    </arr>
    <arr name="resid">
      <long>384</long>
    </arr>
    <arr name="status">
      <str>inbox</str>
    </arr>
    <long name="_version_">1514456876026167296</long></doc>
    ...
</result>
</response>

架构文件中的条目:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
   <field name="resid" type="int" indexed="true" stored="true" multiValued="false" />
   <field name="title" type="string" indexed="true" stored="true" multiValued="false" />
   <field name="name" type="string" indexed="true" stored="true" multiValued="false" />
   <field name="cat" type="string" indexed="true" stored="true" multiValued="true" />
   <field name="role" type="string" indexed="true" stored="true" multiValued="true" />
   <field name="exp" type="float" indexed="true" stored="true" multiValued="false" />

所以我想问一下:

  1. 我在哪里可以进行更改以获得字符串而不是数组的结果?
  2. 如何验证我的核心是否正在使用指定的架构文件?
  3. 要搜索状态为inbox filter的文档,我必须准确地执行status:"inbox search",但是当我搜索status:inboxstatus:filter时我想要这个文档.怎么做?我想这个问题在解决第一个问题后就会得到解决。
  4. 虽然这个问题与本主题无关,但是我在哪里可以将默认输出格式设置为xml,而不是json?我在 solrconfig.xml 中尝试过,但无法获取。

PS:我在任何 xml 文件中执行任何操作后重新启动了 solr,我正在使用 solr-5.3

如果问题不清楚,请随时要求澄清。提前致谢。 :)

虽然我在 schema.xml 中做了修改,但我注意到它没有得到反映,后来我才知道,solr 5.3.x 隐含地使 managed-schema.xml,编辑解决了我所有的疑问。在这里检查: Why is solr returning result with only exact search?

但是问题 #4 仍然悬而未决。我试过 <str name="wt">xml</str> 也写过回复作者 <queryResponseWriter name="xml" class="solr.XMLResponseWriter" />,但无法解决。添加 default="true" 都没有!谁能给我一些建议?

我今天遇到了同样的问题:我正在从 SOLR 4.x 迁移到 5.x 并且在转储所有对象中的数据后突然发现它们的值嵌套在数组中。不确定问题是出在 Haystack 还是加载脚本上,我尝试通过 SOLR 仪表板插入一些新记录。同样的事情,但我注意到一些 SOLR 特定字段加载正常。

这个错误似乎与您指定的字段类型有关。 "tstrings"(我相信这是 haystack 的默认设置)将使数据存储在数组中嵌套,但 "strings" 类型工作得很好。下面是一个字段规范示例,它允许我将数组值转换为字符串值。

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

似乎 Haystack schema.xml 生成器需要一些工作来适应 Solr 5.x 的新约定。

这花了一些时间,但我发现修复所有字段的最佳方法是插入一条 JSON 记录并检查每个字段的格式是否正确。一项一项进行,直到它们都正常工作。

如果有时间,我会看看 Haystack 的 SOLR 模式生成器,看看可能发生了什么变化。

希望这对某人有所帮助!

我在从 4.9 迁移到 6.x 时遇到了同样的问题。我注意到定义为 text_general 的字段返回的数据为 Array。同样的字段在4.9版本的solr中返回的是字符串类型。有趣的是,一些字段没有在 solr 6.x 中转换为数组。我没有用"managed-schema",我用的是经典schema.xml

为了解决这个问题,我从 solr 4.9 中取出 schema.xml 并移动到我的新 solr 核心的 conf/ 目录。所以所有字段定义都来自 solr 4.9,我使用了 solr 6.x 中的 solrconfig.xml 但我禁用了 updateRequestProcessorChain,因为我不打算使用 "field guessing"...等等一旦我重新启动 solr 并重新索引内容,问题就解决了,我没有看到任何数据元素作为数组返回,除非它是一个多值字段。