Настройка индексного преобразователя данных для отображения значений на многоуровневом языке 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",
    ...
},
Другие вопросы по тегам