我打算为apache nutch开发一个插件来自定义索引编写器,我的问题是,当你有权访问NutchDocument时,你只需将数据放在第一级而不是第二级。例如," a"," location"和" url"您可以轻松地按doc.add("url", "www.csad.com");
放置数据,而对于"公司"这是一个复杂的对象,不可能发送公司calss的对象。
这是弹性搜索中的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);
答案 0 :(得分:0)
假设您正在使用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",
...
},