2

I have made an Index, secondCore {id, resid, title, name, cat, role, exp}. When I execute query, then result fields in doc is returned as array (<arr name="fid"><long>6767</long></arr>), but I want it to be string, as it returned in ID(<str name="id">1</str>).

Where can I do the changes? I have multiple cores, and each core have seperate schema.xml, (say server/solr/firstCore/conf/fcschema.xml and server/solr/secondCore/conf/scschema.xml). In core.properties of each core, I have written schema file name as 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>

Entries in schema file:

<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" />

So I wanted to ask:

  1. Where can I do the changes to get result in string rather than array?
  2. How can I verify that, my core is using specified schema file?
  3. To search for the docs having status as inbox filter, I have to perform status:"inbox search" exactly, but I want this doc when I search for status:inbox or status:filter. How to do? I think this problem will get solved after solving first one.
  4. Although this question is not relevant to this topic, but where can I set default output format to xml, rather than json? I tried in solrconfig.xml, but couldn't get it.

PS: I restarted solr after doing anything in any of the xml file, and I'm using solr-5.3

Please feel free to ask for clarification in case the question is unclear. Thanks in advance. :)

MWiesner
  • 8,868
  • 11
  • 36
  • 70
Kamal Nayan
  • 1,890
  • 21
  • 34
  • You need to do a full index to make changes in the schema.xml file effective, not just restart solr. In solrconfig.xml use xml in the request handler. You may also need to add as a Response Writer: (You can also add default="true" to the above query response write to make it the default for all request handlers). – James Doepp - pihentagyu Oct 08 '15 at 14:13
  • I have reindexed my json file, then also I couldnt get solution to my problems! :( @pihentagyu – Kamal Nayan Oct 09 '15 at 06:54
  • @pihentagyu: Problem #4 is still pending. I have tried xml and wrote response writer also , but couldn't resolve it. Neither adding default="true" did! :( – Kamal Nayan Oct 12 '15 at 11:14

3 Answers3

0

Although I have done changes in schema.xml, but I noticed that It was not getting reflected, and later on I came to know that, solr 5.3.x implicitly makes managed-schema.xml, editing which solved all my queries. Check here: Why is solr returning result with only exact search?

But the problem #4 is still pending. I have tried <str name="wt">xml</str> and wrote response writer also <queryResponseWriter name="xml" class="solr.XMLResponseWriter" />, but couldn't resolve it. Neither adding default="true" did! Can anyone provide me any suggestion?

Community
  • 1
  • 1
Kamal Nayan
  • 1,890
  • 21
  • 34
0

I had the same issue today: I was migrating from SOLR 4.x to 5.x and suddenly saw after dumping the data in all of the objects had their values nested inside arrays. Not being sure whether the issue was with Haystack or the load script, I tried inserting a few new records via the SOLR dashboard. Same thing, but I noticed a few SOLR specific fields were loading fine.

This bug seems to be related to the field type that you specify. "tstrings" (i believe this is the default via haystack) will make the data stored nested inside arrays, but the "strings" type works just fine. Below is an example of a field specification that allowed me to go from values that were arrays to string values.

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

It seems the Haystack schema.xml generator needs some work to adapt to new conventions with Solr 5.x.

It took some time, but the best way I found to fix all of my fields was insert a JSON record and check whether each field came in with the correct format. Go one by one until they're all working properly.

If I find some time I'll look at Haystack's SOLR schema generator and see what might have changed.

Hope this helps someone!

madmanick
  • 1,268
  • 10
  • 10
0

I had the same problem , while migrating from 4.9 to 6.x. I noticed fields defined as text_general returned data as an Array. The same field returned a string type in 4.9 version of solr. Interestingly some fields were not converted to array in solr 6.x. I did not use the "managed-schema", I was using the Classic schema.xml.

To solve the problem I took the schema.xml from solr 4.9 and moved to the conf/ directory of my new solr core. So all the fields definitions were from solr 4.9, I used the solrconfig.xml from solr 6.x but I disabled the updateRequestProcessorChain, as I am not going to use "field guessing"...etc. Once I restarted solr and reindexed content, that solved the problem, I did not see any data element being returned as array, unless its a multi-valued field.

John Paul
  • 12,196
  • 6
  • 55
  • 75
  • Thanks Darth for your response. I have solved the issues and have already posted answer in the same thread. Please have a look: http://stackoverflow.com/a/33079717/4414367 – Kamal Nayan Dec 08 '16 at 10:39