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

时间:2015-10-08 12:52:48

标签: search solr lucene information-retrieval

我制作了一个索引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中尝试过,但无法得到它。
  5. PS:我在任何xml文件中执行任何操作后都重新启动了solr,并且我使用solr-5.3中文 如果问题不清楚,请随时要求澄清。提前致谢。 :)

3 个答案:

答案 0 :(得分:0)

虽然我已经对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"都没有!任何人都可以向我提出任何建议吗?

答案 1 :(得分:0)

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

此错误似乎与您指定的字段类型有关。 &#34;字符串列表&#34; (我相信这是通过haystack的默认设置)会使数据存储在数组中,但是&#34;字符串&#34;类型工作得很好。下面是一个字段规范示例,它允许我从数组值变为字符串值。

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

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

花了一些时间,但我发现修复所有字段的最佳方法是插入JSON记录并检查每个字段是否以正确的格式输入。一个接一个地走,直到他们都正常工作。

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

希望这有助于某人!

答案 2 :(得分:0)

我遇到了同样的问题,从4.9迁移到6.x.我注意到定义为text_general的字段将数据作为Array返回。同一字段在4.9版本的solr中返回了一个字符串类型。有趣的是,某些字段未在solr 6.x中转换为数组。我没有使用“托管架构”,我使用的是经典schema.xml

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