【问题标题】:customizing the nutch indexwriter to map values into elastic docin multielvel(like JSON)自定义 nutch 索引器以将值映射到弹性文档 multielvel(如 JSON)
【发布时间】:2017-04-06 09:31:49
【问题描述】:

我打算为 apache nutch 开发一个插件来自定义索引器,我的问题是在插件中当您可以访问 NutchDocument 时,您只是将数据放在第一级而不是第二级。例如对于“a”、“location”和“url”,您可以轻松地通过doc.add("url", "www.csad.com"); 放置数据,而对于“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);

【问题讨论】:

  • 您需要提供更多关于此的信息,您在 Nutch 方面遇到的具体错误是什么?是 ES 错误吗?你有错误吗?还是只是一个空字符串?
  • 我的观点与我正在为 nutch 开发的插件有关,该插件将数据索引到 ES 中,此时我正在附加新字段当字段位于第一个时我没有问题_source 级别,但是当它 ios 处理更深层次时,它什么也不做
  • 关于 geo_point 类型的位置,我需要一个位置列表,但无法从插件中附加
  • 但是您没有从 Nutch 收到任何错误消息的“它什么都不做”部分是什么意思?还是只是 ES 上的字段(公司)为空?
  • 我认为@JavadMalekshahkoohi 正在尝试使用 nutch 自定义插件将复杂对象保存到 elasticsearch,但他不能,有什么办法吗?

标签: elasticsearch nutch indexwriter


【解决方案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",
    ...
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多