Ejemplo n.º 1
0
  /**
   * 创建索引
   *
   * @param bean
   * @return
   */
  public static <T> Document createDocument(T bean) {

    Class<?> clzss = bean.getClass();
    SearchableBean searchableBean = clzss.getAnnotation(SearchableBean.class);
    if (searchableBean == null) {
      return null;
    }
    Document doc = new Document();
    // Field[] fields = clzss.getDeclaredFields();
    Collection<Field> fields = BeanUtils.getAllFieldMap(clzss).values();

    int fieldSize = 0;
    for (Field field : fields) {
      String name = field.getName();
      if (name.equals("serialVersionUID")) continue;

      SearchableField ia = field.getAnnotation(SearchableField.class);
      if (ia != null) {
        fieldSize++;
        String value = getFieldValue(bean, field);

        // 对应的属性列名
        String fieldName = getFieldName(ia, field);
        org.apache.lucene.document.Field indexField = null;
        if (ia.pk() && ia.pkUseDefault()) {
          // 主键使用默认值
          indexField =
              new org.apache.lucene.document.Field(
                  fieldName,
                  value,
                  org.apache.lucene.document.Field.Store.YES,
                  org.apache.lucene.document.Field.Index.NOT_ANALYZED // 索引不分词
                  );
        } else {
          // 即使是主键,也使用配置的值
          Store store = getStore(ia);
          Index index = getIndex(ia);

          indexField = new org.apache.lucene.document.Field(fieldName, value, store, index);
        }

        // 设置权重值
        float boost = getBoost(ia);
        indexField.setBoost(boost);
        doc.add(indexField);
      }
      // 处理主键
      // Id id = field.getAnnotation(Id.class);
      // if (id != null) {
      // // 对象主键也同时进行记录
      // // 对应的属性列名
      // String fieldName = field.getName();
      // String value = getFieldValue(bean, field);
      // org.apache.lucene.document.Field indexField = new
      // org.apache.lucene.document.Field(
      // fieldName, value,
      // org.apache.lucene.document.Field.Store.YES,
      // org.apache.lucene.document.Field.Index.NOT_ANALYZED// 索引不分词
      // );
      //
      // doc.add(indexField);
      // }

    }

    if (fieldSize > 0) return doc;
    return null;
  }