본문 바로가기

Lucene/Lucene In Action11

[루씬 인 액션] 11. 검색 기능 확장(1) - 정렬, Collector, QueryParser 정렬 기능 직접 구현 검색 결과를 연관도 점수, 문서 id, 특정 필드의 값 등이 아닌 다른 값으로 정렬하고 싶다면 루씬의 FieldComparatorSource 클래스를 상속받아 정렬 방법을 직접 구현할 수 있습니다 사용자가 GPS 장비를 통해 현재 검색하는 위치를 파악한다고 가정하면 해당 지점의 위치는 검색 시점에만 알 수 있습니다 색인 시점에 필요한 준비 지리적인 거리로 검색 결과를 정렬하는 예제를 볼까요? ex) 집(0,0)과 사무실(10,10)에서 가장 가까운 멕시코 음식점은 어디? 먼저 색인하는 코드에는 x,y 형태의 문자열로 색인합니다 public class DistanceSortingTest extends TestCase { private RAMDirectory directory; priv.. 2021. 1. 26.
[루씬 인 액션] 10. 고급 검색 기법(3) - 연관도 점수, 텀 벡터 함수 질의와 연관도 점수 상황에 따라 연관도 점수 계산 공식을 고치거나 다른 공식으로 바꿔치기해야 할 필요가 있다면 어떻게 해야 할까요? → 함수 질의를 사용하여 바꿀 수 있습니다 함수 질의 클래스 ValueSourceQuery 모든 함수 질의의 최상위 클래스는 ValueSourceQuery 클래스입니다 각 문서의 연관도 점수는 ValueSourceQuery 인스턴스 생성 시, 지정한 ValueSource 객체를 통해 계산합니다 ValueSourceQuery를 상속받고, 색인된 특정 필드의 값으로 연관도 점수를 계산하는 FieldCacheQuery가 가장 간단한 방법 중 하나입니다 간단한 예제를 살펴볼까요? doc.add(new Field("score", Integer.toString(score), Fi.. 2021. 1. 26.
[루씬 인 액션] 9. 고급 검색 기법(2) - 스팬질의, 검색필터 스팬 질의 스팬(span)이란 특정 필드에서 토큰의 시작 위치와 끝 위치를 말합니다 루씬은 SpanQuery 클래스를 기반으로 하는 다양한 종류의 질의를 지원합니다 토큰의 위치 증가 값과 SpanQuery의 하위 클래스를 활용하면 섬세한 형태의 질의로 검색할 수 있습니다 TermQuery는 단순하게 문서를 찾아내지만, SpanTermQuery 질의는 TermQuery와 같은 문서를 찾아내면서 동시에 질의에 해당하는 텀의 위치까지 모두 파악합니다 (따라서 계산량이 훨씬 많아집니다) 6가지 종류의 SpanQuery를 구현한 클래스 1. SpanTermQuery 다른 종류의 스팬 질의와 함께 사용하는 기본 질의입니다 SpanTermQuery 자체로는 TermQuery와 동일하게 동작하지만, 스팬 질의이기 때문.. 2021. 1. 16.
[루씬 인 액션] 8. 고급 검색 기법(1) - 필드 캐시, 정렬 고급 검색 기법에서는 아래와 같은 방법을 알아보겠습니다 1. 텀의 위치 정보를 활용한 스팬 질의 사용 방법 2. 유사어를 검색할 수 있는 MultiPhraseQuery 클래스 3. FieldSelector 클래스를 사용해 검색 결과 문서에서 원하는 필드만 불러오는 방법 4. 어러 개의 루씬 색인을 대상으로 검색하는 방법 5. 일정 시간이 지나면 진행 중인 검색 작업을 중단하는 방법 6. QueryParser에 기반을 둔 별도의 클래스를 사용해 여러 개의 필드를 한 번에 검색하는 방법 필드 캐시 필드 캐시는 특정 필드값을 순차적으로 조회할 목적으로 만들어졌습니다 사용자에게 노출하게 준비한 기능은 아니며, 검색 애플리케이션 입장에서 고급 검색 기능을 구현할 때 사용할 수 있는 API라고 봐야합니다 어디에 사.. 2021. 1. 4.
[루씬 인 액션] 7. 분석기(2) - 유사어, 기본형 분석기 유사 발음 검색 발음 기본형을 찾아내는 분석기를 구현해봅시다 메타폰, 사운덱스와 같은 알고리즘을 사용할 수 있습니다 메타폰 알고리즘을 사용한 예를 한번 볼까요? public class MetaphoneAnalyzerTest extends TestCase { public void testKoolKat() throws Exception { RAMDirectory directory = new RAMDirectory(); Analyzer analyzer = new MetaphoneReplacementAnalyzer(); IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); Docum.. 2020. 12. 21.
[루씬 인 액션] 6. 분석기(1) - 활용 및 구조 분석기는 여러 단계를 거쳐 텍스트에서 텀을 분리합니다 분석기 활용 루씬은 텍스트를 텀으로 분리해야 할 필요가 있으면 분석기를 사용합니다 분석기는 색인하거나 검색할 때 사용합니다 상황별로 분석기를 어떻게 사용하는지 알아봅시다 예제1) "The quick brown fox jumped over the lazy dog" WhitespaceAnalyzer : [The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dog] SimpleAnalyzer : [The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dog] StopAnalyzer : [quick] [brown] [fox] [jumped] [over] [laz.. 2020. 12. 15.
[루씬 인 액션] 5. 검색(2) - Score & Query 이번에는 연관도 점수와 다양한 종류의 질의에 대해서 살펴보겠습니다 연관도 점수 점수는 문서와 질의가 얼마나 비슷한지를 숫자로 표현한 값입니다 점수가 높을수록 연관도가 높고, 더 확실한 결과라고 볼 수 있습니다 점수 계산 유사도 점수 계산 공식(similarity scoring formula) : 각 문서가 질의와 얼마나 가까운지를 측정 (유사도 점수는 질의(q), 텀(t), 문서(d)를 기준으로 계산) 루씬은 지금까지 알려진 최상의 유사도 계산 공식을 사용하고 있지만, 루씬의 검색 기능을 사용할 때 점수 계산 공식의 세부적인 내용까지 알아야만 하는 건 아니다 (부담을 느낀다면 건너뛰자) 유사도 점수 계산 공식으로 산출한 값은 원본 점수입니다 0.0보다 크거나 같은 실수로 표현합니다 일반적으로 특정 문서의.. 2020. 12. 1.