2017-02-20 1 views
0

인덱싱 중에 최대 절전 모드 검색에서 엔티티에 접미사와 접두사를 추가하는 방법은 무엇입니까?인덱싱 할 때 접두사와 접미사를 추가하는 방법

정확한 검색을 수행하려면이 항목이 필요합니다. 예. "this is a test"를 검색하는 경우 다음 항목을 찾습니다. *이 테스트입니다. * 이것은 테스트이며 ...

그래서 접두사와 접미사를 추가하는 아이디어를 발견했습니다. 인덱싱시 전체 값, 예를 들면 : _____이 테스트는 _____

하나는 "이 테스트입니다"를 검색하고 정확한 검색 확인란을 활성화하면, 내가 TO_ 검색 문자열을 변경할 수 있습니다 " _____ 이것은 테스트입니다 _____ "

이 필터를 만들었지 만 모든 항목에 접두어와 접미사를 추가합니다 :

public boolean incrementToken() throws IOException { 
     if (!this.input.incrementToken()) { 
      return false; 
     } else { 
      String input = termAtt.toString(); 
      // add "_____" at the beginning and ending of the phrase for exact match searching 
      input = "_____ " + input + " _____"; 
      char[] newBuffer = input.toLowerCase().toCharArray(); 
      termAtt.setEmpty(); 
      termAtt.copyBuffer(newBuffer, 0, newBuffer.length); 
      return true; 
     } 
    } 

답변

2

이렇게하는 것이 아닙니다.

색인을 생성하는 문자열은 고유 한 토큰으로 간주됩니다. 이렇게하면 정확한 토큰을 가진 결과 만 얻을 수 있습니다.

이렇게하려면 KeywordTokenizer를 기반으로 분석기를 정의해야합니다.

@Entity 
@AnalyzerDefs({ 
    @AnalyzerDef(name = "keyword", 
     tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class) 
    ) 
}) 
@Indexed 
public class YourEntity { 
    @Fields({ 
     @Field, // your default field with default analyzer if you need it 
     @Field(name = "propertyKeyword", analyzer = @Analyzer(definition = "keyword")) 
    }) 
    private String property; 
} 

그런 다음 속성 키워드 필드를 검색해야합니다. 분석기 정의는 전역이므로 모든 엔티티에서 사용할 수 있도록 하나의 엔티티에 대한 정의 만 선언하면됩니다.

분석기에 대한 설명서를 참조하십시오 : http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#example-analyzer-def.

일반적으로 기본 애널라이저는 찾고자하는 것이 아니기 때문에 분석기가 무엇인지 이해하는 것이 중요합니다.

+0

완벽하게 도와 주셔서 감사합니다. 새로운 것을 배웠습니다. – occurred