private Document buildDoc(EntityBaseBean bean) throws IcatException {
    Map<Field, Integer> stringFields = ei.getStringFields(bean.getClass());
    StringBuilder sb = new StringBuilder();
    for (Entry<Field, Integer> item : stringFields.entrySet()) {
      Field field = item.getKey();
      Method getter = ei.getGetters(bean.getClass()).get(field);
      try {
        String text = (String) getter.invoke(bean);
        if (text != null) {
          if (sb.length() != 0) {
            sb.append(' ');
          }
          sb.append(text);
        }
      } catch (IllegalArgumentException e) {
        throw new IcatException(IcatExceptionType.INTERNAL, e.getMessage());
      } catch (IllegalAccessException e) {
        throw new IcatException(IcatExceptionType.INTERNAL, e.getMessage());
      } catch (InvocationTargetException e) {
        throw new IcatException(IcatExceptionType.INTERNAL, e.getMessage());
      }
    }

    Document doc = new Document();
    String id = bean.getClass().getSimpleName() + ":" + bean.getId();
    doc.add(new StringField("id", id, Store.YES));
    doc.add(new StringField("entity", bean.getClass().getSimpleName(), Store.NO));
    doc.add(new TextField("all", sb.toString(), Store.NO));
    logger.debug("Created document '" + sb.toString() + "' to index for " + id);
    return doc;
  }