Я использую спящий поиск 4.2.0 с спящим 4.2.15 и весной 3.2.10. У меня странное поведение при использовании запроса поиска спящего режима (lucene).спящий поисковый запрос с акцентом
В базе данных у меня есть это значение для содержимого поля: «méchant». Когда я делаю запрос с «mechant», он отлично работает, я получаю объект. Но когда я использую "Mechant" это не работает ...
по картированию:
@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);
Разве кто-то может мне помочь?
[EDIT] Спасибо всем, я решил проблему: это было не из-за поиска в спящем режиме, а в кодировке моего HTTP-запроса. Я проверю, как исправить мою проблему с кодировкой. Извините за пустую трату времени ...
Понятно, что у вас есть проблема с неправильным анализатором, используемым во время запроса. Я действительно не очень понимаю, как Hibernate обрабатывает анализаторы во время запроса, так что здесь просто gues, но что произойдет, если вы измените 'onFields (« content »)' на 'onField (« content »)'? – femtoRgon
Если я использую 'onField (« content »)', нет изменений:/ – Asa42