답변

-1

인터넷을 통해 조사한 프로젝트 중 하나에서 유사한 문제가 발생하여 검색 API를 사용하는 대신 해결 방법 시나리오를 만들었습니다. 내가 한 것은 패턴 기반 검색이 필요한 테이블에 하나의 속성 만 가지고 있다는 것입니다. 나는 여기에서도 나의 코드를 공유하고있다. 동일 표에 키워드를 기억

객관화 엔티티 클래스

@Entity 
public class NewsFeed { 
@Id 
@Index 
private Long feedID; 
private String title; 
private Set<String> titleKeywords; 

// getters and setter 
} 

논리. 내 엔티티의 모든 제목 단어를 키워드로 분리하여이를 Set Object에 저장했습니다. 제목에서 키워드를 추출하기위한

NewsFeed newsFeed = new NewsFeed(); 
newsFeed.setTitle(title); 
newsFeed.setTitleKeywords(getKeywordsSet(newsTitle)); 
// save entity here 

방법

public Set<String> getKeywordsSet(String title) { 
    Set<String> keywords = new HashSet<String>(); 
    String titleNews = title.toLowerCase(); 
    String[] array = titleNews.split(" "); 
    for (int i = 0; i < array.length; i++) { 
     // replacing all special characters here 
     String word = array[i].replaceAll("\\W", ""); 
     keywords.add(word); 
    } 
    return keywords; 
} 

우리의 DB에서 모든 피드 목록, 그리고 마지막으로 아래의 논리에 의해 매개 변수를 검색 할 일치 (필드를 검색 할 수 있습니다).

public List<NewsFeed> getFilterJsonArray(String param){ 
// Listing all the objects of entity 
    List<NewsFeed> list = newsFeedDao.listOrderedFeeds(); 
    List<NewsFeed> matchedObject = new ArrayList<NewsFeed>(); 
    for (NewsFeed newsFeed : list) { 

/** 
* main logic for pattern matched keywords 
**/ 
     if (isAnElementInSet(newsFeed.getTitleKeywords(), param.toLowerCase())) { 
      matchedObject.add(newsFeed); 
     } 
    } 
    return matchedObject; 
} 

public boolean isAnElementInSet(Set<String> keywords, String param) { 
    String []params = param.split(" "); 
    if (keywords.size() > 0) { 
     for(String splittedParam : params){ 
      if (keywords.contains(splittedParam)) { 
       return true; 
      } else{ 
       for (String keyword : keywords) { 
        if(keyword.contains(splittedParam)){ 
         return true; 
        } 
       } 
       return false; 
      } 
     } 
     return true; 
    }else{ 
     return false; 
    } 
} 

나는 이것이 일을 찾기위한 최선의 해결책이 될 수 없다는 것을 알고 있지만,이 해결책은 나를 위해 아주 잘 작동했다. 이 논리를 개선하기 위해 여기에서 공유했습니다.

관련 문제