2014-11-21 3 views
0

나는 Hibernate Search를 처음으로 사용하고 있으며 몇 가지 의구심이있다. 네가 나에게 몇 가지 제안을 해줄 수 있으면 고맙다.Hibernate 조건에 대한 성능 제안 제안

나는 다음과 같은 개체가 :

@Entity 
public class User { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

@Field(name = FIELD_LASTNAME, analyze = Analyze.YES, index = Index.YES) 
private String name; 

private int age; 

..... 

그래서, 검색 사용자를 자신의 나이가 25되는 I 다음을 수행하십시오

QueryBuilder qb = fullTextEntityManager.getSearchFactory() 
    .buildQueryBuilder().forEntity(User.class).get(); 

Query luceneQuery = qb.keyword().onFields("name").matching("Geor").createQuery(); 

Query jpaQuery = fullTextEntityManager 
       .createFullTextQuery(luceneQuery, User.class)        
       .setCriteriaQuery(fullTextEntityManager 
            .createCriteria(User.class) 
            .add(Restrictions.eq("user.age", 25))); 

내 질문

은 다음과 같습니다

  1. 인가 기준을 사용하여 정보를 필터링하는 것이 옳습니까?/언제 그것을 유용하게 사용할 수 있습니까?
  2. @Field를 사용하여 "나이"속성을 색인화해야합니까?
  3. 필터링 할 때 사용해야하는 모든 항목의 속성을 색인화해야합니까?
  4. 색인 된 값을 사용하여 성능이 어떻습니까?
  5. lucene에서 색인을 생성해야하는 값을 선택하는 방법은 무엇입니까? 사전에

감사

답변

1

이 정보를 필터링 할 기준을 사용하는 것이 맞습니까?/언제 그것을 유용하게 사용할 수 있습니까?

최대 절전 모드 검색 Lucene은 Hibernate ORM Criteria 쿼리와 섞어서는 안됩니다. 그건 지원되지 않습니다. 조건 API를 통해 설정할 수있는 것은 연결에 대한 가져 오기 모드입니다.

@Field를 사용하여 "나이"속성을 색인화해야합니까?

예.

필터링 할 때 사용해야하는 모든 항목의 속성을 색인화해야합니까?

물론입니다. Hibernate Search를 사용할 때 검색하는 가장 효율적인 방법은 Lucene 인덱스를 통해 검색에 필요한 모든 정보를 색인화하고 검색 할 수 있는지 확인하는 것입니다. 그런 다음 부울 쿼리를 사용하여 서로 다른 검색 기준을 결합합니다. 또한 특정 속성을 색인화하는 방법에 대해 생각할 수도 있습니다. 예를 들어 숫자가있는 경우 수치 필드로 색인을 생성 할 수 있습니다 (@NumericField 참조). 이렇게하면이 필드에 대한 범위 쿼리 속도가 향상됩니다. 어떤 경우에는 사용자 정의 브리지를 사용하려고 할 수도 있습니다. 그것은 모두 귀하의 유스 케이스와 당신이 검색하고자하는 것에 달려 있습니다.

색인 된 값을 사용하여 성능이 어떻습니까?

전체 텍스트 검색 기능이 필요하고 최대 절전 모드 검색을 사용하는 경우 가장 좋은 방법은 최대 절전 모드 검색 쿼리를 사용하는 것입니다.

lucene에서 색인을 생성해야하는 값을 선택하는 방법은 무엇입니까?

도메인 모델을 가장 잘 알고 있습니다. 지금 검색해야 할 필드가 무엇인지 알아야합니다. 이 필드는 지금 색인을 생성해야하는 최소 필드입니다. 나중에 필요할 수도있는 다른 필드가있는 경우 인덱스 크기가 정말로 걱정되지 않는 한 필드를 추가하십시오. 그러나, 그것은 종종 문제가되지 않습니다. 그리고 잘못 입력하여 나중에 필드를 색인화해야하는 경우에도 필요한 주석을 추가 한 다음 색인을 다시 작성하는 것입니다. 그 특별한 목적을 위해 Search는 매우 강력한 대량 인덱서 API를 제공합니다.

이 정보가 도움이되기를 바랍니다.

+0

답변 해 주셔서 감사합니다. 하지만, 왜 "Hibernate Search Lucene은 Hibernate ORM Criteria 쿼리와 섞여서는 안된다"라고 말하는가? 그것은 지원되지 않는다. " 예제에서는 Criteria를 사용하고 있습니다. 나는 결과를 얻고있다. – devops85

+0

지원되지 않으며 잘못된 결과가 발생할 수 있습니다. Hibernate Search 문서를 체크한다. 정확히 이것에 대한 경고문을 포함하고있다. – Hardy

+0

오케이. 감사합니다! – devops85