Browse Source

更改索引中field命名方式
(因为多个数据库表可能含有同样名称的字段,而现在索引是以字段名称作为field名的,以致field名不具有唯一性,搜索服务无法正确地处理具有相同字段的多个表)

sunyj 9 years ago
parent
commit
bcf2d6f750

+ 4 - 2
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/SearchServiceImpl.java

@@ -124,6 +124,8 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 				for (Entry<String, Object> entry : entrySet) {
 				for (Entry<String, Object> entry : entrySet) {
 					String key = entry.getKey();
 					String key = entry.getKey();
 					Object value = entry.getValue();
 					Object value = entry.getValue();
+					// 拼接索引域名
+					String field = ClassAndTableNameUtils.combineField(tableName, key);
 					/*
 					/*
 					 * 对于明细、企业等所关联的表的数据,是以json格式存储的,搜索时可能会对明细等表中多个字段进行过滤,
 					 * 对于明细、企业等所关联的表的数据,是以json格式存储的,搜索时可能会对明细等表中多个字段进行过滤,
 					 * 但是键都是明细等表在主表中所对应的字段名称,为了实现这样的过滤功能,需要将多个值放在List<Object>中,
 					 * 但是键都是明细等表在主表中所对应的字段名称,为了实现这样的过滤功能,需要将多个值放在List<Object>中,
@@ -133,11 +135,11 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 						@SuppressWarnings("unchecked")
 						@SuppressWarnings("unchecked")
 						List<Object> list = (List<Object>) value;
 						List<Object> list = (List<Object>) value;
 						for (Object object : list) {
 						for (Object object : list) {
-							booleanQuery.add(new TermQuery(new Term(key, String.valueOf(object))),
+							booleanQuery.add(new TermQuery(new Term(field, String.valueOf(object))),
 									BooleanClause.Occur.MUST);
 									BooleanClause.Occur.MUST);
 						}
 						}
 					} else {
 					} else {
-						booleanQuery.add(new TermQuery(new Term(key, String.valueOf(value))), BooleanClause.Occur.MUST);
+						booleanQuery.add(new TermQuery(new Term(field, String.valueOf(value))), BooleanClause.Occur.MUST);
 					}
 					}
 
 
 				}
 				}

+ 46 - 3
search-console-b2b/src/main/java/com/uas/search/console/b2b/util/ClassAndTableNameUtils.java

@@ -6,6 +6,7 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.log4j.Logger;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 
@@ -203,7 +204,13 @@ public class ClassAndTableNameUtils {
 		if (checkEntityClass(clazz)) {
 		if (checkEntityClass(clazz)) {
 			try {
 			try {
 				Method method = clazz.getDeclaredMethod("getKeywordFields");
 				Method method = clazz.getDeclaredMethod("getKeywordFields");
-				return (List<String>) method.invoke(clazz);
+				List<String> keywordFields = (List<String>) method.invoke(clazz);
+				List<String> result = new ArrayList<>();
+				// 返回之前先拼接索引域名
+				for (String keywordField : keywordFields) {
+					result.add(combineField(toTableName(clazz), keywordField));
+				}
+				return result;
 			} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
 			} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
 					| InvocationTargetException e) {
 					| InvocationTargetException e) {
 				throw new SearchException(e).setDetailedMessage(e);
 				throw new SearchException(e).setDetailedMessage(e);
@@ -234,7 +241,8 @@ public class ClassAndTableNameUtils {
 		if (checkEntityClass(clazz)) {
 		if (checkEntityClass(clazz)) {
 			try {
 			try {
 				Field field = clazz.getDeclaredField("ID_FIELD");
 				Field field = clazz.getDeclaredField("ID_FIELD");
-				return field.get(clazz).toString();
+				// 返回之前先拼接索引域名
+				return combineField(toTableName(clazz), field.get(clazz).toString());
 			} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
 			} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
 				logger.error("实体类中没有ID_FIELD变量:" + clazz.getName());
 				logger.error("实体类中没有ID_FIELD变量:" + clazz.getName());
 				throw new SearchException(e).setDetailedMessage(e);
 				throw new SearchException(e).setDetailedMessage(e);
@@ -265,7 +273,8 @@ public class ClassAndTableNameUtils {
 		if (checkEntityClass(clazz)) {
 		if (checkEntityClass(clazz)) {
 			try {
 			try {
 				Field field = clazz.getDeclaredField("DATE_FIELD");
 				Field field = clazz.getDeclaredField("DATE_FIELD");
-				return field.get(clazz).toString();
+				// 返回之前先拼接索引域名
+				return combineField(toTableName(clazz), field.get(clazz).toString());
 			} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
 			} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
 				logger.error("实体类中没有DATE_FIELD变量:" + clazz.getName());
 				logger.error("实体类中没有DATE_FIELD变量:" + clazz.getName());
 				throw new SearchException(e).setDetailedMessage(e);
 				throw new SearchException(e).setDetailedMessage(e);
@@ -335,4 +344,38 @@ public class ClassAndTableNameUtils {
 		}
 		}
 		throw new SearchException("并非合法的表:" + tableName.value());
 		throw new SearchException("并非合法的表:" + tableName.value());
 	}
 	}
+
+	/**
+	 * 获取索引域名,因为不同的表可能会有相同名称的域(即数据库表的列名完全相同),因此,不能用字段名称作为索引的Field域名,
+	 * 需要拼接上表名才能保证每个索引域名独一无二
+	 * 
+	 * @param tableName
+	 *            表名
+	 * @param field
+	 *            数据库表中字段名称
+	 * @return 拼接后的索引域名
+	 */
+	public static String combineField(Table_name tableName, String field) {
+		if (tableName == null) {
+			return null;
+		}
+		return combineField(tableName.value(), field);
+	}
+
+	/**
+	 * 获取索引域名,因为不同的表可能会有相同名称的域(即数据库表的列名完全相同),因此,不能用字段名称作为索引的Field域名,
+	 * 需要拼接上表名才能保证每个索引域名独一无二
+	 * 
+	 * @param tableName
+	 *            表名
+	 * @param field
+	 *            数据库表中字段名称
+	 * @return 拼接后的索引域名
+	 */
+	public static String combineField(String tableName, String field) {
+		if (StringUtils.isEmpty(tableName) || StringUtils.isEmpty(field)) {
+			return null;
+		}
+		return tableName.toLowerCase() + "." + field.toLowerCase();
+	}
 }
 }

+ 47 - 27
search-console-b2b/src/main/java/com/uas/search/console/b2b/util/DocumentToObjectUtils.java

@@ -9,6 +9,7 @@ import org.apache.lucene.document.Document;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import com.alibaba.dubbo.common.utils.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.search.b2b.exception.SearchException;
 import com.uas.search.b2b.exception.SearchException;
+import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.model.EnterpriseSimpleInfo;
 import com.uas.search.console.b2b.model.EnterpriseSimpleInfo;
 import com.uas.search.console.b2b.model.MakeAcceptItemSimpleInfo;
 import com.uas.search.console.b2b.model.MakeAcceptItemSimpleInfo;
 import com.uas.search.console.b2b.model.MakeAcceptSimpleInfo;
 import com.uas.search.console.b2b.model.MakeAcceptSimpleInfo;
@@ -158,25 +159,34 @@ public class DocumentToObjectUtils {
 		if (document == null) {
 		if (document == null) {
 			return null;
 			return null;
 		}
 		}
+		Table_name tableName = ClassAndTableNameUtils.toTableName(PurchaseApCheckSimpleInfo.class);
 		PurchaseApCheckSimpleInfo purcApcheck = new PurchaseApCheckSimpleInfo();
 		PurchaseApCheckSimpleInfo purcApcheck = new PurchaseApCheckSimpleInfo();
-		purcApcheck.setId(Long.valueOf(document.get(PurchaseApCheckSimpleInfo.ID_FIELD)));
-		purcApcheck.setCode(document.get(PurchaseApCheckSimpleInfo.CODE_FIELD));
-		String statusString = document.get(PurchaseApCheckSimpleInfo.STATUS_FIELD);
+		purcApcheck.setId(Long.valueOf(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ID_FIELD))));
+		purcApcheck.setCode(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.CODE_FIELD)));
+		String statusString = document
+				.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.STATUS_FIELD));
 		if (!StringUtils.isEmpty(statusString)) {
 		if (!StringUtils.isEmpty(statusString)) {
 			purcApcheck.setStatus(Short.valueOf(statusString));
 			purcApcheck.setStatus(Short.valueOf(statusString));
 		}
 		}
-		String checkstatus = document.get(PurchaseApCheckSimpleInfo.CHECKSTATUS_FIELD);
+		String checkstatus = document
+				.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.CHECKSTATUS_FIELD));
 		if (!StringUtils.isEmpty(checkstatus)) {
 		if (!StringUtils.isEmpty(checkstatus)) {
 			purcApcheck.setCheckstatus(checkstatus);
 			purcApcheck.setCheckstatus(checkstatus);
 		}
 		}
-		purcApcheck.setDate(new Date(Long.valueOf(document.get(PurchaseApCheckSimpleInfo.DATE_FIELD))));
-		purcApcheck.setEnterprise(JSONObject.parseObject(document.get(PurchaseApCheckSimpleInfo.ENTERPRISE_FIELD),
+		purcApcheck.setDate(new Date(Long.valueOf(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.DATE_FIELD)))));
+		purcApcheck.setEnterprise(JSONObject.parseObject(
+				document.get(
+						ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ENTERPRISE_FIELD)),
 				EnterpriseSimpleInfo.class));
 				EnterpriseSimpleInfo.class));
-		purcApcheck.setVendor(
-				JSONObject.parseObject(document.get(PurchaseApCheckSimpleInfo.VEND_FIELD), EnterpriseSimpleInfo.class));
-		purcApcheck
-				.setItems(toSet(document.get(PurchaseApCheckSimpleInfo.ITEMS_FIELD),
-						PurchaseApCheckItemSimpleInfo.class));
+		purcApcheck.setVendor(JSONObject.parseObject(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.VEND_FIELD)),
+				EnterpriseSimpleInfo.class));
+		purcApcheck.setItems(toSet(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ITEMS_FIELD)),
+				PurchaseApCheckItemSimpleInfo.class));
 		return purcApcheck;
 		return purcApcheck;
 	}
 	}
 
 
@@ -333,15 +343,13 @@ public class DocumentToObjectUtils {
 		makeChanges.setId(Long.valueOf(document.get(MakeChangesSimpleInfo.ID_FIELD)));
 		makeChanges.setId(Long.valueOf(document.get(MakeChangesSimpleInfo.ID_FIELD)));
 		makeChanges.setCode(document.get(MakeChangesSimpleInfo.CODE_FIELD));
 		makeChanges.setCode(document.get(MakeChangesSimpleInfo.CODE_FIELD));
 		makeChanges.setDate(new Date(Long.valueOf(document.get(MakeChangesSimpleInfo.DATE_FIELD))));
 		makeChanges.setDate(new Date(Long.valueOf(document.get(MakeChangesSimpleInfo.DATE_FIELD))));
-		makeChanges.setVend(
-				JSONObject.parseObject(document.get(MakeChangesSimpleInfo.ENTERPRISE_FIELD),
-						EnterpriseSimpleInfo.class));
+		makeChanges.setVend(JSONObject.parseObject(document.get(MakeChangesSimpleInfo.ENTERPRISE_FIELD),
+				EnterpriseSimpleInfo.class));
 		makeChanges.setOrderChangeItems(
 		makeChanges.setOrderChangeItems(
 				toSet(document.get(MakeChangesSimpleInfo.ITEMS_FIELD), MakeOrderChangeItemSimpleInfo.class));
 				toSet(document.get(MakeChangesSimpleInfo.ITEMS_FIELD), MakeOrderChangeItemSimpleInfo.class));
 		return makeChanges;
 		return makeChanges;
 	}
 	}
 
 
-
 	/**
 	/**
 	 * 将Document转换成MakeAccept
 	 * 将Document转换成MakeAccept
 	 * 
 	 * 
@@ -471,23 +479,35 @@ public class DocumentToObjectUtils {
 		if (document == null) {
 		if (document == null) {
 			return null;
 			return null;
 		}
 		}
+		Table_name tableName = ClassAndTableNameUtils.toTableName(PurchaseOrderSimpleInfo.class);
 		PurchaseOrderSimpleInfo purchaseOrder = new PurchaseOrderSimpleInfo();
 		PurchaseOrderSimpleInfo purchaseOrder = new PurchaseOrderSimpleInfo();
-		purchaseOrder.setId(Long.valueOf(document.get(PurchaseOrderSimpleInfo.ID_FIELD)));
-		purchaseOrder.setCode(document.get(PurchaseOrderSimpleInfo.CODE_FIELD));
-		if (!StringUtils.isEmpty(document.get(PurchaseOrderSimpleInfo.REPLY_FIELD))) {
-			purchaseOrder.setReply(Short.valueOf(document.get(PurchaseOrderSimpleInfo.REPLY_FIELD)));
+		purchaseOrder.setId(Long.valueOf(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ID_FIELD))));
+		purchaseOrder.setCode(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.CODE_FIELD)));
+		if (!StringUtils.isEmpty(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.REPLY_FIELD)))) {
+			purchaseOrder.setReply(Short.valueOf(
+					document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.REPLY_FIELD))));
 		}
 		}
-		if (!StringUtils.isEmpty(document.get(PurchaseOrderSimpleInfo.END_FIELD))) {
-			purchaseOrder.setEnd(Short.valueOf(document.get(PurchaseOrderSimpleInfo.END_FIELD)));
+		if (!StringUtils.isEmpty(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.END_FIELD)))) {
+			purchaseOrder.setEnd(Short.valueOf(
+					document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.END_FIELD))));
 		}
 		}
-		purchaseOrder.setStatus(Short.valueOf(document.get(PurchaseOrderSimpleInfo.STATUS_FIELD)));
-		purchaseOrder.setDate(new Date(Long.valueOf(document.get(PurchaseOrderSimpleInfo.DATE_FIELD))));
-		purchaseOrder.setEnterprise(JSONObject.parseObject(document.get(PurchaseOrderSimpleInfo.ENTERPRISE_FIELD),
+		purchaseOrder.setStatus(Short.valueOf(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.STATUS_FIELD))));
+		purchaseOrder.setDate(new Date(Long.valueOf(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.DATE_FIELD)))));
+		purchaseOrder.setEnterprise(JSONObject.parseObject(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ENTERPRISE_FIELD)),
+				EnterpriseSimpleInfo.class));
+		purchaseOrder.setVend(JSONObject.parseObject(
+				document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.VEND_FIELD)),
 				EnterpriseSimpleInfo.class));
 				EnterpriseSimpleInfo.class));
-		purchaseOrder.setVend(
-				JSONObject.parseObject(document.get(PurchaseOrderSimpleInfo.VEND_FIELD), EnterpriseSimpleInfo.class));
 		purchaseOrder.setOrderItems(
 		purchaseOrder.setOrderItems(
-				toSet(document.get(PurchaseOrderSimpleInfo.ITEMS_FIELD), PurchaseOrderItemSimpleInfo.class));
+				toSet(document.get(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ITEMS_FIELD)),
+						PurchaseOrderItemSimpleInfo.class));
 		return purchaseOrder;
 		return purchaseOrder;
 	}
 	}
 
 

+ 53 - 32
search-console-b2b/src/main/java/com/uas/search/console/b2b/util/ObjectToDocumentUtils.java

@@ -10,6 +10,7 @@ import org.springframework.util.StringUtils;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.model.MakeAcceptSimpleInfo;
 import com.uas.search.console.b2b.model.MakeAcceptSimpleInfo;
 import com.uas.search.console.b2b.model.MakeChangesSimpleInfo;
 import com.uas.search.console.b2b.model.MakeChangesSimpleInfo;
 import com.uas.search.console.b2b.model.MakeOrderSimpleInfo;
 import com.uas.search.console.b2b.model.MakeOrderSimpleInfo;
@@ -123,39 +124,52 @@ public class ObjectToDocumentUtils {
 				|| StringUtils.isEmpty(purchaseOrder.getVend().getEnName())) {
 				|| StringUtils.isEmpty(purchaseOrder.getVend().getEnName())) {
 			return null;
 			return null;
 		}
 		}
+		Table_name tableName = ClassAndTableNameUtils.toTableName(PurchaseOrderSimpleInfo.class);
 		Document document = new Document();
 		Document document = new Document();
 		// 不能用LongField,否则后续实时更新索引时,方法updateDocument(new Term("", ""),
 		// 不能用LongField,否则后续实时更新索引时,方法updateDocument(new Term("", ""),
 		// doc)无法根据id进行更新
 		// doc)无法根据id进行更新
-		document.add(
-				new StringField(PurchaseOrderSimpleInfo.ID_FIELD, String.valueOf(purchaseOrder.getId()), Store.YES));
-		document.add(new TextField(PurchaseOrderSimpleInfo.CODE_FIELD, purchaseOrder.getCode(), Store.YES));
+		document.add(new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ID_FIELD),
+				String.valueOf(purchaseOrder.getId()), Store.YES));
+		document.add(new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.CODE_FIELD),
+				purchaseOrder.getCode(), Store.YES));
 		// TODO 暂时将未结案的设为0,以后在数据源头进行处理
 		// TODO 暂时将未结案的设为0,以后在数据源头进行处理
 		if (purchaseOrder.getEnd() != null) {
 		if (purchaseOrder.getEnd() != null) {
-			document.add(new StringField(PurchaseOrderSimpleInfo.END_FIELD, String.valueOf(purchaseOrder.getEnd()),
-					Store.YES));
+			document.add(
+					new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.END_FIELD),
+							String.valueOf(purchaseOrder.getEnd()), Store.YES));
 		} else {
 		} else {
-			document.add(new StringField(PurchaseOrderSimpleInfo.END_FIELD, String.valueOf(0), Store.YES));
+			document.add(
+					new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.END_FIELD),
+							String.valueOf(0), Store.YES));
 		}
 		}
 		// TODO 暂时将未回复的设为0,以后在数据源头进行处理
 		// TODO 暂时将未回复的设为0,以后在数据源头进行处理
 		if (purchaseOrder.getReply() != null) {
 		if (purchaseOrder.getReply() != null) {
-			document.add(new StringField(PurchaseOrderSimpleInfo.REPLY_FIELD, String.valueOf(purchaseOrder.getReply()),
-					Store.YES));
+			document.add(
+					new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.REPLY_FIELD),
+							String.valueOf(purchaseOrder.getReply()), Store.YES));
 		} else {
 		} else {
-			document.add(new StringField(PurchaseOrderSimpleInfo.REPLY_FIELD, String.valueOf(0), Store.YES));
+			document.add(
+					new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.REPLY_FIELD),
+							String.valueOf(0), Store.YES));
 		}
 		}
-		document.add(new TextField(PurchaseOrderSimpleInfo.DISPLAY_FIELD, String.valueOf(purchaseOrder.getDisplay()),
-				Store.YES));
-		document.add(new StringField(PurchaseOrderSimpleInfo.STATUS_FIELD, String.valueOf(purchaseOrder.getStatus()),
-				Store.YES));
-		document.add(new LongField(PurchaseOrderSimpleInfo.DATE_FIELD, purchaseOrder.getDate().getTime(), Store.YES));
+		document.add(
+				new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.DISPLAY_FIELD),
+						String.valueOf(purchaseOrder.getDisplay()), Store.YES));
+		document.add(
+				new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.STATUS_FIELD),
+						String.valueOf(purchaseOrder.getStatus()), Store.YES));
+		document.add(new LongField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.DATE_FIELD),
+				purchaseOrder.getDate().getTime(), Store.YES));
 		// enterprise、vend和orderItems以json的格式存储
 		// enterprise、vend和orderItems以json的格式存储
-		document.add(new TextField(PurchaseOrderSimpleInfo.ENTERPRISE_FIELD,
-				JSONObject.toJSONString(purchaseOrder.getEnterprise()), Store.YES));
-		document.add(new TextField(PurchaseOrderSimpleInfo.VEND_FIELD, JSONObject.toJSONString(purchaseOrder.getVend()),
-				Store.YES));
+		document.add(
+				new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ENTERPRISE_FIELD),
+						JSONObject.toJSONString(purchaseOrder.getEnterprise()), Store.YES));
+		document.add(new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.VEND_FIELD),
+				JSONObject.toJSONString(purchaseOrder.getVend()), Store.YES));
 		if (!CollectionUtils.isEmpty(purchaseOrder.getOrderItems())) {
 		if (!CollectionUtils.isEmpty(purchaseOrder.getOrderItems())) {
-			document.add(new TextField(PurchaseOrderSimpleInfo.ITEMS_FIELD,
-					JSONObject.toJSONString(purchaseOrder.getOrderItems()), Store.YES));
+			document.add(
+					new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseOrderSimpleInfo.ITEMS_FIELD),
+							JSONObject.toJSONString(purchaseOrder.getOrderItems()), Store.YES));
 		}
 		}
 		return document;
 		return document;
 	}
 	}
@@ -835,29 +849,36 @@ public class ObjectToDocumentUtils {
 				|| StringUtils.isEmpty(purcApcheck.getEnterprise().getEnName()) || purcApcheck.getDate() == null) {
 				|| StringUtils.isEmpty(purcApcheck.getEnterprise().getEnName()) || purcApcheck.getDate() == null) {
 			return null;
 			return null;
 		}
 		}
+		Table_name tableName = ClassAndTableNameUtils.toTableName(PurchaseApCheckSimpleInfo.class);
 		Document document = new Document();
 		Document document = new Document();
 		// 不能用LongField,否则后续实时更新索引时,方法updateDocument(new Term("", ""),
 		// 不能用LongField,否则后续实时更新索引时,方法updateDocument(new Term("", ""),
 		// doc)无法根据id进行更新
 		// doc)无法根据id进行更新
-		document.add(
-				new StringField(PurchaseApCheckSimpleInfo.ID_FIELD, String.valueOf(purcApcheck.getId()), Store.YES));
-		document.add(new TextField(PurchaseApCheckSimpleInfo.CODE_FIELD, purcApcheck.getCode(), Store.YES));
+		document.add(new StringField(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ID_FIELD),
+				String.valueOf(purcApcheck.getId()), Store.YES));
+		document.add(new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.CODE_FIELD),
+				purcApcheck.getCode(), Store.YES));
 		if (!StringUtils.isEmpty(purcApcheck.getCheckstatus())) {
 		if (!StringUtils.isEmpty(purcApcheck.getCheckstatus())) {
-			document.add(new TextField(PurchaseApCheckSimpleInfo.CHECKSTATUS_FIELD, purcApcheck.getCheckstatus(),
-					Store.YES));
+			document.add(new TextField(
+					ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.CHECKSTATUS_FIELD),
+					purcApcheck.getCheckstatus(), Store.YES));
 		}
 		}
-		document.add(new LongField(PurchaseApCheckSimpleInfo.DATE_FIELD, purcApcheck.getDate().getTime(), Store.YES));
+		document.add(new LongField(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.DATE_FIELD),
+				purcApcheck.getDate().getTime(), Store.YES));
 		if (null != purcApcheck.getStatus()) {
 		if (null != purcApcheck.getStatus()) {
-			document.add(new StringField(PurchaseApCheckSimpleInfo.STATUS_FIELD,
+			document.add(new StringField(
+					ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.STATUS_FIELD),
 					String.valueOf(purcApcheck.getStatus()), Store.YES));
 					String.valueOf(purcApcheck.getStatus()), Store.YES));
 		}
 		}
-		document.add(new TextField(PurchaseApCheckSimpleInfo.ENTERPRISE_FIELD,
+		document.add(new TextField(
+				ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ENTERPRISE_FIELD),
 				JSON.toJSONString(purcApcheck.getEnterprise()), Store.YES));
 				JSON.toJSONString(purcApcheck.getEnterprise()), Store.YES));
-		document.add(new TextField(PurchaseApCheckSimpleInfo.VEND_FIELD, JSON.toJSONString(purcApcheck.getVendor()),
-				Store.YES));
+		document.add(new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.VEND_FIELD),
+				JSON.toJSONString(purcApcheck.getVendor()), Store.YES));
 		// vend和orderItems以json的格式存储
 		// vend和orderItems以json的格式存储
 		if (purcApcheck.getItems() != null) {
 		if (purcApcheck.getItems() != null) {
-			document.add(new TextField(PurchaseApCheckSimpleInfo.ITEMS_FIELD,
-					JSONObject.toJSONString(purcApcheck.getItems()), Store.YES));
+			document.add(
+					new TextField(ClassAndTableNameUtils.combineField(tableName, PurchaseApCheckSimpleInfo.ITEMS_FIELD),
+							JSONObject.toJSONString(purcApcheck.getItems()), Store.YES));
 		}
 		}
 		return document;
 		return document;
 	}
 	}