1

我打算为 apache nutch 开发一个插件来自定义 indexwriter,我的问题是在插件中当你可以访问 NutchDocument 时,你只是将数据放在第一级而不是第二级。例如,对于“a”、“location”和“url”,您可以轻松地将数据放在doc.add("url", "www.csad.com");“company”中,而“company”是一个复杂的对象,不可能发送公司类的对象。

这是我在弹性搜索中的 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);
4

1 回答 1

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",
    ...
},
于 2017-10-25T16:19:10.273 回答