Bhanu
Bhanu

Reputation: 1

Solr won't search on fields belonging to nested entities

I am using apache solr for bulding search for a website. I am using nested entities to import data from different tables. Dataimport is successfull and all the documents are being added to the index. My dataConfig goes like this :

<dataConfig>
  <dataSource type="JdbcDataSource" driver ="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/purplle_purplle2" user="purplle_purplle" password="purplle123" />

  <document name="doc">
     <entity name="offer" query="SELECT * FROM service_offering WHERE module LIKE 'location' ">

       <field column="name" name="name"/>
       <field column="id" name="id" />
       <field column="type_id" name="type_id" />

       <entity name="offer_type" query=" select name from service_offeringtype where id='${offer.type_id}'" >
          <field column="name" name="offer_type" />
       </entity>

       <entity name="offer_location" query=" select name from service_location where id='${offer.module_id}'" >
          <field column="name" name="location_name" />
       </entity>

       <entity name="offer_address" query=" select * from service_address where module_id='${offer.module_id}' AND module LIKE 'location'" >

          <entity name="loc_city" query=" select name from loc_city where id='${offer_address.city}'" >
            <field column="name" name="loc_city" />
          </entity>

          <entity name="loc_area" query=" select name from loc_area where id='${offer_address.area}'" >
            <field column="name" name="loc_area" />
          </entity>

          <entity name="loc_zone" query=" select name from loc_zone where id='${offer_address.zone}'" >
            <field column="name" name="loc_zone" />
          </entity>

       </entity>

    </entity>

  </document>

</dataConfig>

Now if i directly do a search on this index. The results are fetched only for "name" field. It returns null for other fields namely "loc_area","location_name","loc_city" etc. My schema looks like this

<field name="id"  type="int" indexed="true" stored="true" /> 
<field name="name"  type="string" indexed="true" stored="true" />  
<field name="offer_type"  type="string" indexed="true" stored="true" />
<field name="location_name"  type="string" indexed="true" stored="true" />
<field name="type_id"  type="string" indexed="true" stored="true" />     
<field name="loc_city"  type="string" indexed="true" stored="true" /> 
<field name="loc_area"  type="string" indexed="true" stored="true" /> 
<field name="loc_zone"  type="string" indexed="true" stored="true" /> 

However if i copy these fields into a "text" field which is present by default in the schema.xml. Then by searching on "text" field i easily get the relevant results.

<copyField source="name" dest="text"/>
<copyField source="offer_type" dest="text"/>
<copyField source="location_name" dest="text"/>
<copyField source="loc_city" dest="text"/>
<copyField source="loc_area" dest="text"/>
<copyField source="loc_zone" dest="text"/>

But i cannot do it like this because i have to assign boost levels to different fields for calcuation of score. The moment i append this in the query syntax "&defType=edismax&qf=name^1.0+location_name^10.0+loc_area^50.0" it returns null results.

What is wrong?

Upvotes: 0

Views: 934

Answers (1)

femtoRgon
femtoRgon

Reputation: 33341

My guess is that your problem is the type of your fields. I don't know exactly what your fields contain, but there is a difference between type="string" and type = "text".

The String type indexes an untokenized String value of the entire field input. Text type tokenizes and analyzes the the field. For example, if I search for "john" against a string field containing "John Smith" I would not expect a hit, where if the field were a text field, I would get a hit.

Since your query seems to work against a text field, and not a string field, changing the types and reindexing seems to be a likely solution.

Upvotes: 1

Related Questions