'offset'에 해당되는 글 3건

  1. 2021.11.10 [Arirang] 아리랑 사용 시 startOffset, endOffset 역전 현상
  2. 2021.01.20 [Filebeat] registry 파일 내 offset 초기화.
  3. 2016.03.30 [Lucene] TermVector 정보 중 Offset 에 대해서.

[Arirang] 아리랑 사용 시 startOffset, endOffset 역전 현상

ITWeb/검색일반 2021. 11. 10. 14:24

아리랑 형태소 분석기 에서 synonym filter 사용을 하지 않았는데도 offset 역전 현상이 발생 할 경우가 있습니다.
보통은 synonym filter 로 인해서 발생 하는 경우가 있는데요.
total.dic, extension.dic 에 등록된 단어들이 띄어쓰기 없이 복합명사 처럼 작성이 되었을 경우 간혹 발생 할 수 있습니다.

예)

Input Text : 전문의사시대
Dictionary Text : 전문, 전문의, 의사, 사시, 시대
Analyzed Text : 전문, 전문의, 사시, 의사, 시대

복합명사 사전인 compound.txt 에는 등록이 되어 있지 않습니다.
전문의사시대:전문,의사,시대:0000
로 등록을 하면 원하는 결과를 얻을 수 있고 오류도 없어집니다.

 

에러 유형)

startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards ...중략...

 

:

[Filebeat] registry 파일 내 offset 초기화.

Elastic/Beats 2021. 1. 20. 15:14

filebeat 의 registry 관련 설정 정보는 아래 공식 문서를 참고하세요.

www.elastic.co/guide/en/beats/filebeat/current/configuration-general-options.html

 

문서 설명에도 있지만, 

 

- 기본 경로는 아래와 같습니다.

The default is ${path.data}/registry

 

Registry 의 구조체를 확인해 보면 아래와 같은데요.

type Registry struct {
	Path          string        `config:"path"`
	Permissions   os.FileMode   `config:"file_permissions"`
	FlushTimeout  time.Duration `config:"flush"`
	CleanInterval time.Duration `config:"cleanup_interval"`
	MigrateFile   string        `config:"migrate_file"`
}

설정에서 path 를 잡아 주지 않으면, 코드 상으로는  "filebeat.py"

default_registry_path = 'registry/filebeat'

위 경로 아래 meta.json 과 log.json 두 개의 파일이 생기고 파일들에 대한 offset 관리가 이루어 집니다.

 

Logstash input file 의 sincedb 와 같이 offset  정보를 reset 하기 위해서는 

- log.json 에서 offset 설정을 다시 해주거나

- 걍 registry 삭제 하고 재 시작 하시면 됩니다.

 

tail_files 설정도 있고 해당 log file 삭제를 하는 것도 있고, 용도와 목적에 맞게 시도해 보시면 될 것 같습니다.

 

:

[Lucene] TermVector 정보 중 Offset 에 대해서.

ITWeb/검색일반 2016. 3. 30. 17:33

아는 것도 이제는 기억이 가물가물 합니다. 그래서 또 기록해 봅니다.

사내 교육을 하면서 lucene 기본 이론 교육을 하다, start offset 과 end offset 에 대해서 설명을 해주고 있었는데요.

end offset 이 실제 text의 offset 값 보다 1 크다는 것에 대한 질문이 있었습니다.


아는 건데 일단 가볍게라도 설명하고 넘어 가야해서 아무래도 highlight 기능을 위해서 그렇게 설정 하는것 같다고 하고 오늘 문서랑 소스 코드 좀 다시 살펴 봤습니다.


lucene in aciton 에서 퍼온 글)

The start offset is the character position in the original text where the token text begins, and the end offset is the position just after the last character of the token text.


end offset 이 실제 보다 1 큰 이유는 문서에 있습니다.

그런데 왜 이렇게 되었을까를 고민해 보면 내부 처리 방식을  확인해 봐야 합니다.


highlight 기능이기 때문에 이 작업에 필요한 class 파일과 fragment에 대한 처리 로직을 확인 하면 됩니다.

protected String makeFragment( StringBuilder buffer, int[] index, Field[] values, WeightedFragInfo fragInfo,
String[] preTags, String[] postTags, Encoder encoder ){
StringBuilder fragment = new StringBuilder();
final int s = fragInfo.getStartOffset();
int[] modifiedStartOffset = { s };
String src = getFragmentSourceMSO( buffer, index, values, s, fragInfo.getEndOffset(), modifiedStartOffset );
int srcIndex = 0;
for( SubInfo subInfo : fragInfo.getSubInfos() ){
for( Toffs to : subInfo.getTermsOffsets() ){
fragment
.append( encoder.encodeText( src.substring( srcIndex, to.getStartOffset() - modifiedStartOffset[0] ) ) )
.append( getPreTag( preTags, subInfo.getSeqnum() ) )
.append( encoder.encodeText( src.substring( to.getStartOffset() - modifiedStartOffset[0],
to.getEndOffset() - modifiedStartOffset[0] ) ) )
.append( getPostTag( postTags, subInfo.getSeqnum() ) );
srcIndex = to.getEndOffset() - modifiedStartOffset[0];
}
}
fragment.append( encoder.encodeText( src.substring( srcIndex ) ) );
return fragment.toString();
}

코드 보시면 아시겠죠.

기본적으로 String.substring( inclusive begin index, exclusive end index) 을 이용하기 때문에 end offset 값은 1 커야 하는 것입니다.

다른 의미로 보면 그냥 offset 정보와 text 의 length 정보를 한꺼번에 offsets 로 해결하기 좋은 방법으로 봐도 될 것 같습니다.


: