최대 절전 모드 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 문제를 해결하는 방법을 확인하겠습니다. 시간 낭비 죄송합니다 ...
검색어 시간에 잘못된 분석기 사용에 문제가 있음을 분명히 알 수 있습니다. 나는 Hibernate가 질의시 분석기를 다루는 방법에 대해 정말로 끔찍하지 않다. 그러므로 여기서는 단지 gues이지만, onFields ("content")'를'onField ("content")'로 변경하면 어떻게 될까? – femtoRgon
'onField ("content")'를 사용하면 변경되지 않습니다 :/ – Asa42