|  | @@ -1,7 +1,8 @@
 | 
	
		
			
				|  |  |  package com.tzld.longarticle.recommend.server.service.recommend.filter.strategy;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 | 
	
		
			
				|  |  | -import com.tzld.longarticle.recommend.server.common.ThreadPoolFactory;
 | 
	
		
			
				|  |  | +import com.google.common.cache.Cache;
 | 
	
		
			
				|  |  | +import com.google.common.cache.CacheBuilder;
 | 
	
		
			
				|  |  |  import com.tzld.longarticle.recommend.server.common.enums.StatusEnum;
 | 
	
		
			
				|  |  |  import com.tzld.longarticle.recommend.server.model.dto.Content;
 | 
	
		
			
				|  |  |  import com.tzld.longarticle.recommend.server.model.entity.crawler.ArticleSensitive;
 | 
	
	
		
			
				|  | @@ -18,10 +19,9 @@ import org.apache.commons.collections4.CollectionUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Set;
 | 
	
		
			
				|  |  | -import java.util.concurrent.ExecutorService;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Component
 | 
	
		
			
				|  |  |  @Slf4j
 | 
	
	
		
			
				|  | @@ -37,7 +37,8 @@ public class SensitiveStrategy implements FilterStrategy {
 | 
	
		
			
				|  |  |      @ApolloJsonValue("${UnSafeTitles:[]}")
 | 
	
		
			
				|  |  |      private static List<String> UnSafeTitles;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private final ExecutorService pool = ThreadPoolFactory.deDuplicatePool();
 | 
	
		
			
				|  |  | +    Cache<String, Boolean> similarityCache = CacheBuilder.newBuilder()
 | 
	
		
			
				|  |  | +            .expireAfterWrite(60 * 15, TimeUnit.SECONDS).build();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public FilterResult filter(FilterParam param) {
 | 
	
	
		
			
				|  | @@ -65,10 +66,19 @@ public class SensitiveStrategy implements FilterStrategy {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          List<Set<Character>> unsafeTitleCache = TitleSimilarCheckUtil.makeCache(allUnSafeTitles);
 | 
	
		
			
				|  |  | +        List<String> allTitles = param.getContents().stream().map(Content::getTitle).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        Map<String, Boolean> similarityMap = new HashMap<>(similarityCache.getAllPresent(allTitles));
 | 
	
		
			
				|  |  |          for (Content content : param.getContents()) {
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  | -                if (TitleSimilarCheckUtil.isDuplicateContentByCache(content.getTitle(), unsafeTitleCache,
 | 
	
		
			
				|  |  | -                        TitleSimilarCheckUtil.SIMILARITY_THRESHOLD)) {
 | 
	
		
			
				|  |  | +                Boolean isSimilar;
 | 
	
		
			
				|  |  | +                if (similarityMap.containsKey(content.getTitle())) {
 | 
	
		
			
				|  |  | +                    isSimilar = similarityMap.get(content.getTitle());
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    isSimilar = TitleSimilarCheckUtil.isDuplicateContentByCache(content.getTitle(), unsafeTitleCache,
 | 
	
		
			
				|  |  | +                            TitleSimilarCheckUtil.SIMILARITY_THRESHOLD);
 | 
	
		
			
				|  |  | +                    similarityCache.put(content.getTitle(), isSimilar);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (isSimilar) {
 | 
	
		
			
				|  |  |                      content.setFilterReason("安全违规");
 | 
	
		
			
				|  |  |                      filterContents.add(content);
 | 
	
		
			
				|  |  |                  } else {
 |