|
|
@@ -19,11 +19,13 @@ import org.apache.lucene.search.ScoreDoc;
|
|
|
import org.apache.lucene.search.Sort;
|
|
|
import org.apache.lucene.search.SortField;
|
|
|
import org.apache.lucene.search.TopDocs;
|
|
|
+import org.apache.lucene.search.BooleanClause.Occur;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import com.uas.search.b2b.exception.SearchException;
|
|
|
+import com.uas.search.b2b.model.MultiValue;
|
|
|
import com.uas.search.b2b.model.PageParams;
|
|
|
import com.uas.search.b2b.model.SPage;
|
|
|
import com.uas.search.b2b.service.SearchService;
|
|
|
@@ -153,18 +155,20 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
String field = ClassAndTableNameUtils.combineField(tableName, key);
|
|
|
/*
|
|
|
* 对于明细、企业等所关联的表的数据,是以json格式存储的,搜索时可能会对明细等表中多个字段进行过滤,
|
|
|
- * 但是键都是明细等表在主表中所对应的字段名称,为了实现这样的过滤功能,需要将多个值放在List<Object>中,
|
|
|
- * 作为filters中key-value的value传递过来
|
|
|
+ * 但是键都是明细等表在主表中所对应的字段名称,为了实现这样的过滤功能,需要将多个值放在com.uas.search.
|
|
|
+ * b2b.model.MultiValue中, 作为filters中key-value的value传递过来
|
|
|
*/
|
|
|
- if (value instanceof ArrayList) {
|
|
|
- List<Object> list = (List<Object>) value;
|
|
|
- for (Object object : list) {
|
|
|
- booleanQuery.add(SearchUtils.getBooleanQuery(field, String.valueOf(object)),
|
|
|
- BooleanClause.Occur.MUST);
|
|
|
+ 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.getBooleanQuery(field, String.valueOf(object)), occur);
|
|
|
}
|
|
|
+ booleanQuery.add(booleanQuery2, Occur.MUST);
|
|
|
} else {
|
|
|
- booleanQuery.add(SearchUtils.getBooleanQuery(field, String.valueOf(value)),
|
|
|
- BooleanClause.Occur.MUST);
|
|
|
+ booleanQuery.add(SearchUtils.getBooleanQuery(field, String.valueOf(value)), Occur.MUST);
|
|
|
}
|
|
|
|
|
|
}
|