Browse Source

排除过滤支持排除多值

sunyj 8 years ago
parent
commit
18c7fd9835

+ 2 - 1
search-api-b2b/src/main/java/com/uas/search/b2b/service/SearchService.java

@@ -290,7 +290,8 @@ public interface SearchService {
 	 *            </table>
 	 * 
 	 *            <p>
-	 *            关于排除过滤,键为数据库表中相应的字段名称,值为需排除的值
+	 *            关于排除过滤,键为数据库表中相应的字段名称,值为需排除的值,若值有多个,则使用
+	 *            {@link com.uas.search.b2b.model.MultiValue}
 	 *            </p>
 	 * @return 单据id
 	 * @throws SearchException

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

@@ -320,8 +320,21 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 					String key = entry.getKey();
 					Object value = entry.getValue();
 					String field = ClassAndTableNameUtils.combineField(tableName, key);
-					if (value != null) {
-						booleanQuery.add(SearchUtils.regexpQuery(field, String.valueOf(value), false), Occur.MUST_NOT);
+					// 排除多个值
+					if (value instanceof MultiValue) {
+						MultiValue multiValue = (MultiValue) value;
+						List<Object> values = multiValue.getValues();
+						Occur occur = multiValue.isOr() ? Occur.SHOULD : Occur.MUST;
+						BooleanQuery booleanQuery2 = new BooleanQuery();
+						for (Object object : values) {
+							booleanQuery2.add(SearchUtils.regexpQuery(field, String.valueOf(object), false), occur);
+						}
+						booleanQuery.add(booleanQuery2, Occur.MUST_NOT);
+					} else {
+						if (value != null) {
+							booleanQuery.add(SearchUtils.regexpQuery(field, String.valueOf(value), false),
+									Occur.MUST_NOT);
+						}
 					}
 				}
 			}