0

I am indexing a collection of xml document with the next structure:

<mydoc>
  <id>1234</id>
  <name>Some Name</name>
  <experiences>
    <experience years="10" type="Java"/>
    <experience years="4" type="Hadoop"/>
    <experience years="1" type="Hbase"/>
  </experiences>
</mydoc>

Is there any way to create solr index so that it would support the next query:

find all docs with experience type "Hadoop" and years>=3

So far my best idea is to put delimited years||type into multiValued string field, search for all docs with type "Hadoop" and after that iterate through the results to select years>=3. Obviously this is very inefficient for a large set of docs.

1 Answers1

0

I think there is no obvious solution for indexing data coming from the many-to-many relationship. In this case I would go with dynamic fields: http://wiki.apache.org/solr/SchemaXml#Dynamic_fields

Field definition in schema.xml:

<dynamicField name="experience_*" type="integer"  indexed="true"  stored="true"/>

So, using your example you would end up with something like this:

<mydoc>
  <id>1234</id>
  <name>Some Name</name>
  <experience_Java>10</experience_Java>
  <experience_Hadoop>4</experience_Hadoop>
  <experience_Hbase>1</experience_Hbase>
</mydoc>

Then you can use the following query: fq=experience_Java:[3 to *]

Kamil Bednarz
  • 748
  • 6
  • 9