我制作了一个索引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.xml
和server/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" />
所以我想问:
inbox filter
的文档,我必须完全执行status:"inbox search"
,但在搜索status:inbox
或status:filter
时我需要此文档。怎么做?我认为解决第一个问题后这个问题就会得到解决。xml
,而不是json
?我在solrconfig.xml中尝试过,但无法得到它。PS:我在任何xml文件中执行任何操作后都重新启动了solr,并且我使用solr-5.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并重新索引内容,解决了问题,我没有看到任何数据元素作为数组返回,除非它是一个多值字段。