'2017/11/14'에 해당되는 글 2건

  1. 2017.11.14 [Lucene] Inverted index file - 역인덱스 파일
  2. 2017.11.14 [Elasticsearch] _id mapping 시 path 설정

[Lucene] Inverted index file - 역인덱스 파일

ITWeb/검색일반 2017. 11. 14. 23:15

루씬에서 검색을 하기 위해 필요한 파일을 살짝 알아보겠습니다.

파일 구조와 목록은 아래 문서를 참고 하시기 바랍니다.

Lucene Index File Formats)

https://lucene.apache.org/core/7_1_0/core/org/apache/lucene/codecs/lucene70/package-summary.html#package.description


그럼 실제 검색을 위해 보셔야 하는 기본이 되는 클래스는 

  • IndexSearcher
  • IndexReader
  • CollectionStatistics
  • TermStatistics

이렇게 4개 정도 보시면 될 것 같습니다.


검색을 위해 필요한 정보는

  • Documents
  • Fields
  • Terms
  • FieldInvertState

이렇게 4개 정도가 필요 합니다.

딱 봐도 "searchField:elasticsearch" 하면 

  • searchField 라는 field 정보가 필요하고, 
  • elasticsearch 라는 term 관련 정보도 필요하고, 
  • elasticsearch 라는 term 이 있는 document 정보도 필요하고,
  • 해당 field 에서의 term 이 추출 된 offset과 position 정보가

필요합니다.


이걸 정리한 이유는 오늘 누가 custom function score query 를 사용하여 다수의 field 에 대한 ranking term boosting 기능을 사용하고 있는데 성능적으로 개선 할 수 있는 방법이 없는지 물어봐서 간단하게 정리해봤습니다.

Query 튜닝은 한계가 반드시 존재 합니다.

서버의 구조적인 개선과 튜닝을 병행해야 하며 다수의 field 에 대한 다수의 term boosting 은 최적화를 통해 최소화 해서 사용하는걸 추천 드립니다.

그리고 inverted index file 이라는 것은 루씬에서 하나의 파일만 이야기 하는 것이 아니라 lucene 이 가지고 있는 index file 목록들이 inverted index file 을 구성 한다고 보시면 될 것 같습니다.

:

[Elasticsearch] _id mapping 시 path 설정

Elastic/Elasticsearch 2017. 11. 14. 11:13

_id 에 사용하시는 데이터의 primary key 값을 지정 하고 싶을때가 많이 있습니다.

기억이 가물가물해서 잠시 찾아 봤는데요.

2.4 까지는 path 설정 기능이 살아 있었는데 5.X 들어 가면서 삭제 되었습니다.


2.4)

private String path = Defaults.PATH;


public Builder() {

    super(Defaults.NAME, new FieldType(Defaults.FIELD_TYPE));

    indexName = Defaults.INDEX_NAME;

}


public Builder path(String path) {

    this.path = path;

    return builder;

}


그래서 _id field 에 primary key 를 넣고 싶으실 경우  IndexRequestBuilder.setId() 를 이용하시거나 JSON 파일 만드실 때 _id field 에 primary key 값을 넣어 주시면 됩니다.


: