2016-12-03 2 views
1

문자열에 '='의 경우 빈 결과를 반환합니다 :최대 절전 모드 검색 (루씬은) 내가 열 <code>test</code>의 값으로 내 최대 절전 모드 모델을 검색 루씬을 구성

  1. AB = ABC
  2. AB = BCD

I는 fo를 만들어 열 값으로 검색을위한 llowing 코드 : 코드가 작동 위

String queryValue = "AB"; 
QueryBuilder qb = org.hibernate.search.jpa.Search.getFullTextEntityManager(em).getSearchFactory().buildQueryBuilder().forEntity(Test.class).get(); 
Query query = qb.all().createQuery(); 

BooleanJunction<BooleanJunction> conjuction = qb.bool(); 
String searchValue = new StringBuilder().append("*").append(queryValue .toLowerCase()).append("*").toString(); 
conjuction.should(qb.keyword().wildcard().onFields(new String[] { "test"}).matching(searchValue).createQuery()); 
query = conjuction.createQuery(); 

FullTextQuery textQuery = org.hibernate.search.jpa.Search.getFullTextEntityManager(em).createFullTextQuery(query, Test.class); 
return textQuery.getResultList(); 

AB와 루씬을 위해 찾아 나에게 2 개 레코드를 반환,하지만 난 AB=을 찾고 때 나에게 빈 결과를 반환합니다.


UPDATE

여기에 색인에 대한 코드입니다 : Lucen 이후

나는 빈 결과를 얻고 이유를 알아
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em); 
fullTextEntityManager.createIndexer().startAndWait(); 

이 나에게 2 개 레코드를 반환해야는? 어떻게 해결할 수 있습니까? 사용 된 분석기 기본적

+0

어떻게 색인을 생성합니까? – root545

+0

ID로 색인화하는 것을 의미합니다. – bontade

+0

색인 생성 중에 사용하는 분석기는 무엇입니까? – root545

답변

1

는 standaranalyzer가 =에 토큰을 분할하고, 생성 된 토큰으로부터도 = 제거 StandardAnalyzer https://docs.jboss.org/hibernate/search/5.3/reference/en-US/html_single/#analyzer

이다.

AB=ABC으로 색인을 생성하면 다음과 같은 토큰이 만들어집니다.

당신이 *AB*를 검색 할 때 결과

을 얻을하지만 *AB=*을 검색 할 때 이러한 토큰이 없기 때문에 당신이 무엇을 찾을 수없는 이유는 AB, ABC

.

+0

설명 해줘서 고마워. 그것을 고칠 수있는 가장 좋은 방법과 그것을 고치는 방법을 아십니까? – bontade

+1

토큰을 "="로 나누지 않으려면'keywordTokenizer'와 같은 것을 사용할 수 있습니다. 이것은 전체 문장을 토큰으로 사용합니다. 그것은 모두 어떻게 당신이 당신의 저장된 것들을 검색 하느냐에 달려 있습니다. 나는 당신이 lucene에서 분석기에 대해 읽는 것을 제안합니다. – root545

+0

분석기는 "해결해야"하는 것이 아니라 매우 강력합니다. 목표에 맞는 분석 도구를 선택하는 것이 좋습니다. 단순히 "정확한 일치"(TermQuery라고도 함)를 원할 경우 필드 주석에서 analyze = NO를 사용하십시오. – Sanne