루씬 숫자형 인덱싱 출력 9.3.0 기준
아리랑 형태소 분석기 소스를 보다 루씬 간단히 색인 및 검색을 구현해보면 어떨까 싶어서 색인기랑 간단한 검색기능을 만들어봤다. (구현이라기 보단 복붙이 더 가깝지만..)
문자타입은 검색 질의시 잘나오나 숫자타입이 나오질 않았다. 인터넷을 대강 찾아보니 대강 아래의 형태가 나왔다. 문제는 최신버전(루씬 라이브러리 9.3.0 사용) 에서 바꼇는지 int든 long이든 double이든 등등 생성자 지원을 하지 않는다. 바이트를 지원하길래 바이트로 넣었더니 바이트로 색인된다... 일단은 모든 필드에 대해 출력이 목적이기에 구글링을 좀 더 해보았지만 딱히 답이 안보였다.
FieldType fieldType = new FieldType();
fieldType.setStored(true);
Field field = new Field("age",String.valueOf(hannu.getAge()).getBytes() ,fieldType);
document.add(field);
참고로 아래와 같이
문자형의 경우 Field.Store.YES 해당을 지원 하여 간편하게 가능 하다.
숫자의 경우 아래와 같이 색인시 출력을 지원하지 않는다. 당연히 옵션도 기능이 없다.
document.add(new StringField("id", hannu.getId(), Field.Store.YES));
document.add(new LongPoint("age", hannu.getAge() ) );
해결)
열심히 구글링 하다가 그냥 소스상에서 뒤져서 해결 했다. 그냥 소스부터 찾을껄... 습관을 바꿔야 하나? 하긴 구글링이 맞는 경우도 있으니 꼭 바꿀필요까지는 없겠지만...
아무래도 최상단의 소스는 예전버전 방법 같고 최신 루씬 LIB에서는 아래와 같은 형태로 하면 되는듯 하다.
document.add( new StoredField("age",hannu.getAge()) ) ;
위의 3개는 인터넷에서 찾은 방법인 바이트로 넣었을때 (물론 해당블로그에서 바이트로 변환 하지는 않았다. 숫자타입 그대로 넣을 방법이 없어서 내가 바꿧다) 맨밑에는 StoredField 사용하여 숫자로 잘들어간걸 볼 수 있다.
엘라스틱 검색과 엔지니어링만 미친듯이 파고들었던 지난날의 나를 반성하며 루씬도 좀 봐두면 엘라스틱 이해에 도움이 크게 될듯 하다.
- id : [stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:a1>, stored,indexed,tokenized,omitNorms,indexOptions=DOCS<name:aa1>, stored<age:[31 31]>]
- id : [stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:a1>, stored,indexed,tokenized,omitNorms,indexOptions=DOCS<name:aa1>, stored<age:[31 31]>]
- id : [stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:a1>, stored,indexed,tokenized,omitNorms,indexOptions=DOCS<name:aa1>, stored<age:[31 31]>]
- id : [stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:a1>, stored,indexed,tokenized,omitNorms,indexOptions=DOCS<name:aa1>, stored<age:11>]
Store.YES : 검색시 내용이 나오게함
Store.NO : 검색시 내용이 안나오게함
Store.COMPRESS : 압축 저장 함 (글 내용이 크거나, binary 파일)
indexOptions 도 꽤 여러가지가 있다. 해당 내용은 나중에 공부좀 더하고나서 포스팅 하자.
Store.COMPRESS 최신기준 안보인다 YES NO 만 doc에서 확인 찾아보면 나오것지 이것도 나중에..
'자바' 카테고리의 다른 글
groovy Json 한글 제어시 UTF8 escape 변환안되게 하기 (1) | 2023.10.24 |
---|---|
Groovy 이미지 변환 코드 (0) | 2023.07.30 |
elasticsearch basic auth 인증 코드 (0) | 2022.10.01 |
vscode 이클립스 단축키 똑같이 하기 (0) | 2022.08.07 |
알파벳 배열 만들기 (0) | 2022.08.05 |