Solrj и динамические поля - PullRequest
7 голосов
/ 04 июня 2011

У меня есть схема solr с динамическим полем различных типов. Например, в schema.xml есть:

<dynamicField name="*_s" type="string" indexed="true"  stored="true"/>
<dynamicField name="*_i" type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_l" type="long"   indexed="true"  stored="true"/>
<dynamicField name="*_f" type="float"  indexed="true"  stored="true"/>
<dynamicField name="*_d" type="double" indexed="true"  stored="true"/>

И я хочу получить доступ к этим полям, используя аннотированный POJO SolrJ. Я знаю, что у меня могут быть разные ссылки на карту для каждого типа данных в POJO, например:

...
@Field("*_s")
public Map<String, String> strings;

@Field("*_i")
public Map<String, Integer> integers;
...

Но возможно ли хранить все динамические поля на одной карте? Я думал что-то вроде:

...
@Field("*_s")
@Field("*_i")
public Map<String, Object> dynamicFields;
...

Единственная документация, которую я могу найти о SolrJ, POJO и динамических полях, это старый запрос функции: https://issues.apache.org/jira/browse/SOLR-1129

1 Ответ

10 голосов
/ 09 июня 2011

Я установил, что сопоставление значения 'pattern' в аннотации @Field не должно совпадать с тем, что находится в вашем schema.xml. Итак, я определил карту в своем классе документов:

@Field("*DF")
private Map<String, Object> dynamicFields;

, а затем в файле schema.xml для динамических полей есть шаблоны с постфиксом 'DF':

<dynamicField name="*_sDF" type="string" indexed="true" stored="true"/>
<dynamicField name="*_siDF" type="sint" indexed="true" stored="true"/>
<dynamicField name="*_tDF" type="date" indexed="true" stored="true"/>

Теперь все dynamicField с различными типами значений хранятся и извлекаются с использованием solrServer.addBean (doc) и solrResponse.getBeans (Doc.class). Это с Solr 3.2.0. Он не работал с 1.4 ..

...