2014-04-11 3 views
1

나는 Spring 2.5와 Hibernate core 3.3.2 GA로 기존 응용 프로그램과 함께 최대 절전 모드 검색 3.1.1을 통합했습니다. hibernate-search-3.1.1에서, lucene 2.4.1을 사용하고 있습니다.Hibernate Search 3.1.1 - 임의의 순서로 필드의 같은 문구에서 여러 단어를 검색하는 방법

내가 직면하는 문제는 한 단어 또는 여러 단어를 순서대로 검색 할 때 완벽하게 검색하여 결과를 반환하지만 여러 단어를 빈 칸으로 순서없이 검색하면 결과가 반환되지 않습니다. 예를 들어

으로 색인이 생성 된 텍스트가있는 경우

"Hello great world!"

Now "Hello"또는 "great world"를 검색하면 결과가 성공적으로 반환되지만 "world Hello"를 검색하면 결과가 반환되지 않습니다.

전체 또는 부분 단어 중 하나라도 색인 된 텍스트와 일치하면 결과를 반환 할 수 있습니다. 내 소스 코드는 다음과 같습니다.

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(this.entityManager); 

// create native Lucene query 
String[] fields = new String[] { "text", "description", "standard.title", "standard.briefPurpose", "standard.name" }; 
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer()); 
org.apache.lucene.search.Query query = null; 

try { 
    query = parser.parse(searchTerm); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

// wrap Lucene query in a javax.persistence.Query 
FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Requirement.class); 

// execute search 
@SuppressWarnings("unchecked") 
List<Requirement> result = persistenceQuery.getResultList(); 

return result; 

내가 원하는 것을 지원하려면 무엇이든지 추가해야합니다.

답변

0

PhraseQuery.setSlop(int)을 사용해 보셨습니까? 이것은 단어 재정렬을 허용해야합니다. 자세한 내용은 Javadoc을 확인하십시오.

2

나는 그 아주 오래된 질문을 안다. 그러나 다른 짧은 설명이 도움이 될 수 있습니다.

pojo 클래스에 @Field 주석이있는 analyze = Analyze.YES 속성을 사용해야합니다. 이 필드의 문자열 값을 토큰, 즉 단일 단어로 나눕니다. 따라서 어떤 순서로든 검색 할 수 있습니다. 그러나 전 세계에 들어가야한다는 점에 유의하십시오. 예를 들어 '미국'을 검색하는 경우 '미국', '미국', '미국 유나이티드', '아메리카 유나이티드'등으로 검색 할 수 있습니다.하지만 Hibernate 검색을 통해 전체 단어를 요구할 수 있습니다. 'Uni'만 작동하지 않습니다.

편집 : 최대 절전 모드 검색 API를 이전 버전에 대한

:

하나는 @Field 주석을 Index.TOKENIZED 대신 analyze = Analyze.YES를 사용한다.

관련 문제