/** * 创建索引 * * @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; }