2013-05-04 4 views
0

Я индексировать коллекцию XML-документ со следующей структурой:индекса Solr для многозначных мульти-типа поля

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

Есть ли способ, чтобы создать SOLR индекса, так что он будет поддерживать следующий запрос:

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

до сих пор моя лучшая идея состоит в том, чтобы положить Разграниченный годам || типа в многозначном поле цепочки, искать все документы с типом «Hadoop» и после этого перебирать результаты выберите года> = 3. Очевидно, что это очень неэффективно для большого набора документов.

ответ

0

Я думаю, что нет очевидного решения для индексирования данных, поступающих из отношений «многие ко многим». В этом случае я бы с динамическими полями: http://wiki.apache.org/solr/SchemaXml#Dynamic_fields

Определение поля в schema.xml:

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

Таким образом, используя ваш пример вы бы в конечном итоге с чем-то вроде этого:

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

Тогда вам могут использовать следующий запрос: fq=experience_Java:[3 to *]

Смежные вопросы