2017-03-12 6 views
0

를 재사용 재사용하기 :효율성 :</p> <pre><code>public long getDF(String term) throws Exception { return indexReader.docFreq(new Term("content", term)); } </code></pre> <p>내가 설명서를 읽어 나는 기간이 생성자를 사용할 수 있습니다 : 나는이 메소드를 호출 새 매번 작성하는 대신 계약 기간 개체를 재사용 할 기간 루씬 6

public Term(String fld) 
Constructs a Term with the given field and empty text. This serves two purposes: 1) reuse of a Term with the same field. 2) pattern for a query. 

는 그러나, 나는이 용어 설명서에 아무 세터가 없기 때문에 다음 단계 무엇인지 알고도() 메소드를 재설정하지 않습니다.

이것을 달성하는 방법에 대한 힌트가 있습니까?

답변

0

건설 약관은 저렴합니다. 당신은 아마 그들을 재사용하는 것에 대해 너무 많이 걱정해서는 안됩니다. 실제 성능 문제가있는 경우 프로파일 러를 실행해야합니다. 나는 용어를 구성하는 것이 진짜 문제가 아니라고 생각하고, 이와 같은 조항을 재사용하려고하면 분명한 이득을 얻지 못한다.

그렇다면 Term.bytes()에서 Term의 BytesRef를 가져 와서 기본 바이트 배열을 직접 수정하여 다시 사용할 수 있습니다.

String text = "text"; 
Term term = new Term("field"); 
BytesRef bytes = term.bytes(); 
bytes.bytes = new byte[UnicodeUtil.maxUTF8Length(text.length())]; 
bytes.length = UnicodeUtil.UTF16toUTF8(text, 0, text.length(), bytes.bytes); 

아직 사용중인 용어의 값을 변경하지 않도록주의하십시오. 예를 들어, 이런 식으로 BooleanQuery에 두 개의 절을 추가하려고하면 물론 작동하지 않습니다.