본문 바로가기

Lucene

[Lucene] IndexDeletionPolicy 참고용 링크 http://lucene.jugem.jp/?eid=179http://blog.softwaregeeks.org/archives/118 더보기
[Lucene] Result Grouping http://www.searchworkings.org/blog/-/blogs/faceting-%26-result-grouping 더보기
[Lucene] MultiReader의 사용 정확히 어느버전 부터인지는 모르겠으나 제가 사용하고 있는 루씬 3.3.0 버전에서는 MultiSearcher 클래스가 deprecated 되어있었습니다. 내용을 보면 NumericRangeQuery 부분이 문제가 있는 듯 합니다. https://issues.apache.org/jira/browse/LUCENE-2756 때문에 기존에 사용하던 MultiSeacher 대신 MultiReader의 사용을 권하고 있네요. 기본적으로 IndexSearcher를 생성시 IndexReader를 넘겨줄 때 MultiReader를 넘겨주는 방식으로 사용하시면 될 것 같습니다. 기존에는 Searcher를 여러개 만들어서 MultiSearcher를 생성하는 방식이었지만 이것은 Reader를 여러개 만들어서 IndexSear.. 더보기
[Lucene] coord와 Match Term 가져오기 방명록에 남겨진 질문 중 하나에 대한 답을 찾아보려고 이것저것 해보다가 우선 생각나는 방법이 있어서 적어보려고 합니다. 질문의 내용은 루씬의 Explain에서.. 0.5987479 = (MATCH) product of: 1.4968698 = (MATCH) sum of: 0.7484349 = (MATCH) weight(label:시크릿 in 0), product of: 0.40649435 = queryWeight(label:시크릿), product of: 2.9459102 = idf(docFreq=1, maxDocs=14) 0.13798599 = queryNorm 1.8411939 = (MATCH) fieldWeight(label:시크릿 in 0), product of: 1.0 = tf(termFreq(l.. 더보기
[Lucene] 한글명사 추출 Analyzer 입니다. 이번에 공개소프트웨어 개발자 대회에 출품하였다가 1회전 낙방한 한글명사 추출 Analyzer입니다. 형태소 분석 알고리즘은 들어있지 않고 String Scan 형식으로 사전과 Match되는 명사를 추출하고 동의어사전, 복합명사사전, 불용어사전등을 사용하여 루씬의 Analyzer와 Filter의 사용으로 여러 기능을 구현하고 있습니다. 형태소분석까지는 무리더라도 Scan을 좀 빠른 속도와 효율적인 알고리즘, 자료구조로 바꿔보고 싶은 욕심은 있습니다. 형태소분석 기능이 들어가면 더할나위 없이 좋겠지만 제가 형태소분석에 대한 지식이 없어서 구현은 하지 못 하였습니다. 소스는 github를 사용하여 관리하고 있습니다. 한글명사 추출의 기능적인 면보다도 어쩌면 Analyzer와 Filter의 사용에 대한 공부에 .. 더보기
[Lucene] Lcuene Score 잘 정리된 링크 http://lucene.apache.org/java/2_9_1/scoring.html http://lucene.apache.org/java/2_9_1/api/core/org/apache/lucene/search/Similarity.html http://www.lucenetutorial.com/advanced-topics/scoring.html 누군가 질문을 하셔서 전부터 한번 깊게 공부해보고 싶던 Lucene Score를 조금씩 보고 있습니다. 우선 루씬에서의 Score 공식을 아래와 같습니다. Lucene의 Score 공식 score(q,d) = Sigma(t in q)(tf(t in d) * idf(t)^2 * getBoost(t in q) * getBoost(t.field in d.. 더보기
[Lucene] similiarity simple java code static double cosine_similarity(Map v1, Map v2) { Set both = Sets.newHashSet(v1.keySet()); both.retainAll(v2.keySet()); double sclar = 0, norm1 = 0, norm2 = 0; for (String k : both) sclar += v1.get(k) * v2.get(k); for (String k : v1.keySet()) norm1 += v1.get(k) * v1.get(k); for (String k : v2.keySet()) norm2 += v2.get(k) * v2.get(k); return sclar / Math.sqrt(norm1 * norm2); } http://stackoverflo.. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 - Analyzer (2) - 그러면 이제 루씬에서의 Analyzer에 대해서 살펴보도록 하겠습니다. 이제부터 정말 작성하기가 조심스러워지네요... 저도 루씬을 잘 이해하고 있는 상태는 아니라서.... ㅎㅎ 더군다나 제가 공부하며 만들었던 루씬 버전이 2.4 정도 버전인데 현재 3.3 버전은 기본적인 개념은 비슷하겠지만 내부적은 구현 방식은 완전히 바뀌었더라구요... 앞으로 내부적인 루씬 소스에대한 설명보다는 주로 사용법/커스터마이즈 방법을 소개해드리게 될 것 같습니다. 우선 Analyzer가 어떻게 사용되는지 보도록 하겠습니다. AnalyzerUsageSampleTest.java 우선 분석 할 문장을 StringReader로 생성하고, 이 문장을 분석 할 Analyzer를 생성합니다. 여기서는 WhitespaceAnalyzer를 이.. 더보기
[Lucene] Numeric 필드의 사용과 주의점 빠른 정렬을 위해서 Number의 값을 갖는 필드에 대해서 Numeric 필드를 사용하도록 이번에 로그 분석 프로그램을 개발하면서수정하였다. 아.. 근데 이걸로 이렇게 시간을 끌줄이야...ㅠㅠ 루씬은 String만으로도 색인이 가능하지만 숫자 필드에 대해서는 특별한 필드 타입을 지원하는데 그것이 바로 NumericField 필드이다. NumericField의 사용 위와 같은 방식으로 일반적인 필드 생성과는 조금 다른 방식으로 작동을 하게 된다. 위와 같이 필드를 설정하면 아래와 같은 쿼리식이 가능하다. 주의 할 점은 색인 할 때 사용한 Numberic 필드의 타입과 RangeQuery에 셋팅되는 타입이 같아야 한다. NumericField의 구간 검색 쿼리 생성 다만 주의 할 점은 필드에 들어가는 값의 .. 더보기
Lucene 3.0 그리고 CustomScoreQuery. http://softwaregeeks.org/blog/271 트랙백을 남겨주신 짐승님의 글을 보고 ... ^^ 항상 검색 엔진의 인덱스 파일의 용량이 대용량으로 가면서 문제 되는 것이 정렬 문제 였다. 그러던 중 짐승님이 남겨주신 트랙백의 글을 보고 정신이 탁 트여지는 것을 느꼈다. 예전에도 루씬의 DocScore를 가중치나 계산 공식 변경등을 통해 수정 할 수 있다는 것은 알았었는데 그 score자체가 정렬과 연관이 지어지지를 않고 있었다. 그런데 짐승님의 (아 이거 어감이 정말..-_-;;;) 글 http://softwaregeeks.org/blog/271 을 보고나니 뭔가 탁~~~ 하고 깨이는 느낌.. 나는 왜 저렇게 생각의 전환이 안 되는거지... -.-; 안그래도 회사에서 로그 분석을 간단하게 .. 더보기