Настройка индексного преобразователя данных для отображения значений на многоуровневом языке Docin (например, JSON)
Я собираюсь разработать плагин для Apache Nutch для настройки индексатора, моя проблема в том, что в плагине, когда у вас есть доступ к NutchDocument, вы просто размещаете данные на первом уровне, а не на втором уровне. например, для "a", "location" и "url" вы можете легко поместить данные doc.add("url", "www.csad.com");
в то время как для "компании", которая является сложным объектом, невозможно отправить объект компании.
это мои idnex_Metadata в упругом поиске
{
"properties":{
"a":{
"type":"string"
},
"company":{
"type":"object",
"properties":{
"id":{
"type":"integer",
"index":"not_analyzed"
},
"type":{
"type":"string",
"index":"not_analyzed"
},
"name":{
"type":"string"
},
"location":{
"type":"geo_point"
},
"slug":{
"type":"string",
"index":"not_analyzed"
}
}
},
"location":{
"type":"geo_point",
"lat_lon":"true"
},
"url":{
"type":"string",
"index":"not_analyzed"
}
}
}
Я не могу отправить данные "компании" в плагине Java, но без компании это работает хорошо
doc.add("location", rs.getString("ic_company_lat") + "," + rs.getString("ic_company_lng"));
Company cmp = new Company();
cmp.setId(Integer.parseInt(rs.getString("ic_company_id")));
cmp.setType("type");
cmp.setName(rs.getString("ic_company_name"));
doc.add("company", cmp);
1 ответ
Предполагая, что вы используете elastic-indexer
плагин, Nutch из коробки не поддерживает использование пользовательских классов для индексации (вы можете добавить его в NutchDocument
Например, вам нужно написать свою собственную логику, чтобы обрабатывать ее в индексаторах ES/Solr, т.е. модифицировать плагины).
Вы можете выполнить то, что вы хотите, используя простой HashMap
:
Map map = new HashMap<String, String>();
map.put("name", "Company Name");
...
doc.add("company", map);
С этим вы получите документ со структурой, которую вы ищете в ES:
"company": {
"name": "Awesome company",
...
},