도서 통합검색 API를 만드는데 인덱스를 불러오지 못하는 에러가 발생했다. 

에러 : Can't find FULLTEXT index matching the column list

분명 제목, 작가에 대한 인덱스가 각각 존재하는데 왜 불러오지 못하는걸까?

혹시 두개의 자료를 함께 묶어서 인덱스 작업을 했어야하는게 아닐까?

 

통합검색이라면 보통 포함되어야하는 것이 제목, 작가, 출판사 정도이다. 

일단 테스트를 위해 제목과 작가를 하나로 묶어 인덱스 작업을 하는 것이 가능한지 체크해보기로 했다. 

# 인덱스화 같이 만드는 것이 필요
ALTER TABLE books ADD FULLTEXT INDEX idx_authr_nm_title_nm (AUTHR_NM, TITLE_NM);

두개의 컬럼이 묶여서 인덱스가 되어있지 않으면 컬럼 단순히 더하는 방식으로는 Full-Text Search를 못하는것 같다.

 

에러 : Duplicate entry 'NULL-NULL' for key 'books.idx_authr_nm_title_nm'

FullText 인덱스에는 NULL값을 허용하지 않는다. NULL값을 가진 레코드를 인덱스에 추가하려고 할 때 오류가 발생한다고 한다.

해결방법

1. NULL값을 가진 레코드를 삭제한다.

2. 인덱스 생성시 NULL값을 제외하도록 설정한다. 

 

NULL값을 제외하기 위해 찾아보니 coalesce 함수를 사용해보기로 했다. -> 실패

 

일단 통합검색이 실행되도록 프로토타입을 만들기 위해 네이티브 쿼리로 작성해서 시간을 측정해보기로 했다. 

@Query(value = "SELECT * FROM books WHERE TITLE_NM LIKE %:query% OR AUTHR_NM LIKE %:query%", nativeQuery = true)
List<Book> findAllByAuthorAndTitle(@Param("query") String query);

책제목 : 자바 (ㅇ)

작가 : 남궁성(x)

출판사 : 믿음사(x)

 

자바는 검색결과가 나왔지만 작가와 출판사에 대한 검색결과는 나오지 않았다. 

문제점을 찾지 못해 일단은 JPQL 쿼리로 작성하여 재시도

@Query("select b from Book b where b.title like %:title% or b.author like %:title% or b.publisher like %:title%")
List<Book> findAllByTitleOrAuthorOrPublisher(@Param("query") String query);

책제목 : 자바 (ㅇ)

작가 : 남궁성(x)

출판사 : 믿음사(x)

 

JPA쿼리와 마찬가지로 JPQL역시 자바는 검색결과가 나왔지만 작가와 출판사에 대한 검색결과는 나오지 않았다. 

도대체 뭐가 문제인지 모르겠다.

 

좀 쉬다와서 다시 고민해봐야겠다. 

2023.04.12 오후 06:22

 

왜 제목만 검색되고 작가와 출판사에 대한 정보는 검색하지 못하는가?

 

+ Recent posts