2014-11-02 2 views
0

최대 절전 모드 4.2.05와 4.2.15 및 3.2.10의 스프링을 사용합니다. 최대 절전 모드 검색 (lucene) 쿼리를 사용할 때 이상한 동작이 발생합니다.액센트가있는 최대 절전 모드의 검색 쿼리

데이터베이스에서 나는이 필드 내용 값 "méchant"를가집니다. "mechant"로 쿼리를 만들면 제대로 작동하지만 objet를 얻습니다. 하지만 사용할 때 "méchant"는 작동하지 않습니다 ...

에 대한 매핑은 다음과 같다 :

@Entity 
@Indexed 
@AnalyzerDef(name = "customAnalyzer", 
    tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), 
    filters = { 
     @TokenFilterDef(factory = LowerCaseFilterFactory.class), 
     @TokenFilterDef(factory = ASCIIFoldingFilterFactory.class), 
     @TokenFilterDef(factory = SnowballPorterFilterFactory.class) 
    }) 
@Table(name = "MESSAGE") 
public class Message { 

    ... 

    @Id 
    @DocumentId 
    @GeneratedValue 
    @Column(name = "ID_MESSAGE") 
    public Integer getId() { 
     return id; 
    } 

    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
    @Analyzer(definition="customAnalyzer") 
    @Column(name = "CONTENT", length = 65535, columnDefinition = "Text") 
    public String getContent() { 
     return content; 
    } 

    ... 
] 

최대 절전 모드 설정 :

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > 
    <property name="dataSource" ref="customDataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.bytecode.provider">javassist</prop> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.show_sql">${hibernate.showSql}</prop> 
     <prop key="hibernate.hbm2ddl.auto">validate</prop> 
     <prop key="hibernate.search.default.directory_provider">filesystem</prop> 

     <prop key="hibernate.search.default.indexBase">${indexLucene.path}</prop> 
     </props> 
    </property> 
</bean>  

쿼리 :

FullTextSession searchSession = Search.getFullTextSession(getSessionFactory().getCurrentSession()); 
QueryBuilder qb = searchSession.getSearchFactory().buildQueryBuilder().forEntity(Message.class).get(); 
BooleanJunction<BooleanJunction> bool = qb.bool(); 

... 

bool.must(qb.keyword().boostedTo(4f) 
    .onFields("content") 
    .matching(messageCriteria.getQuery()) 
    .createQuery()); 
... 

org.apache.lucene.search.Query luceneQuery =bool.createQuery(); 
FullTextQuery jpaQuery = searchSession.createFullTextQuery(luceneQuery, Message.class); 

누군가 나를 도울 수 있습니까?

[편집] 고맙습니다. 문제를 해결했습니다. 그것은 최대 절전 모드 검색 때문이 아니라 내 http 요청의 문자 세트 때문입니다. 내 charset 문제를 해결하는 방법을 확인하겠습니다. 시간 낭비 죄송합니다 ...

+0

검색어 시간에 잘못된 분석기 사용에 문제가 있음을 분명히 알 수 있습니다. 나는 Hibernate가 질의시 분석기를 다루는 방법에 대해 정말로 끔찍하지 않다. 그러므로 여기서는 단지 gues이지만, onFields ("content")'를'onField ("content")'로 변경하면 어떻게 될까? – femtoRgon

+0

'onField ("content")'를 사용하면 변경되지 않습니다 :/ – Asa42

답변

0

예제에서 언어 매개 변수를 지정하지 않고 SnowballPorterFilterFactory을 사용하고 있습니다. 기본값은 영어로되어 있습니다. 원하는 언어가 아닐 수도 있습니다. 이것을 타겟 언어로 변경해 보셨습니까?

+0

다음과 같이 :'@TokenFilterDef (factory = SnowballPorterFilterFactory.class, params = @Parameter (name = "language", value = "French")' 효과가 없습니다 ... – Asa42