[英]Infinispan Hibernate search :org.hibernate.hql.ParsingException: HQLLUCN000003
我正在使用Infinispan 6.0,並且想使用Infinispan的Query DSL進行搜索。
我看到了analytics.Hibernate DSL中的YES對分析文本字段很有意義,因此我想用它來搜索標題和字幕。
這是設置屬性的代碼:
public Properties getProperties()
{
Trace.start("Starting to set the properties.");
SearchMapping mapping = new SearchMapping();
mapping.entity(DatatypeProperty.class).indexed().providedId()
.property("rdfResource", ElementType.FIELD).field().analyze(Analyze.NO).store(Store.YES)
.property("typeId", ElementType.FIELD).field().analyze(Analyze.NO)
.property("xmlLang", ElementType.FIELD).field().analyze(Analyze.NO)
.property("value", ElementType.FIELD).field().analyze(Analyze.YES)
.property("objectTypeId", ElementType.FIELD).field().analyze(Analyze.NO)
.property("partitionValue", ElementType.FIELD).field().analyze(Analyze.NO)
.property("normVal", ElementType.FIELD).field().analyze(Analyze.YES)
.property("stemVal", ElementType.FIELD).field().analyze(Analyze.YES)
.property("tokenVal", ElementType.FIELD).field().analyze(Analyze.YES)
.property("dateVal", ElementType.FIELD).field().analyze(Analyze.YES)
.property("numVal", ElementType.FIELD).field().analyze(Analyze.YES);
Properties properties = new Properties();
properties.put("hibernate.search.default.directory_provider", "ram");
properties.put(Environment.MODEL_MAPPING, mapping);
properties.put("lucene_version", "LUCENE_CURRENT");
Trace.stop("Have already set the properties.");
return properties;
}
當我嘗試查詢時:
Caused by: org.hibernate.hql.ParsingException: HQLLUCN000003: No queries can be applied to property normVal in type org.cismef.db.core.object.DatatypeProperty since the property is analyzed.
at org.hibernate.hql.lucene.internal.ClassBasedLuceneQueryResolverDelegate.normalizeProperty(ClassBasedLuceneQueryResolverDelegate.java:218)
at org.hibernate.hql.lucene.internal.ClassBasedLuceneQueryResolverDelegate.normalizePropertyPathTerminus(ClassBasedLuceneQueryResolverDelegate.java:208)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.pathedPropertyReference(GeneratedHQLResolver.java:13086)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.propertyReferencePath(GeneratedHQLResolver.java:12917)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.valueExpressionPrimary(GeneratedHQLResolver.java:7950)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.valueExpression(GeneratedHQLResolver.java:7483)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.predicate(GeneratedHQLResolver.java:5584)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.searchCondition(GeneratedHQLResolver.java:4858)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.searchCondition(GeneratedHQLResolver.java:4800)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.whereClause(GeneratedHQLResolver.java:2348)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.querySpec(GeneratedHQLResolver.java:2203)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.queryExpression(GeneratedHQLResolver.java:2106)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.queryStatement(GeneratedHQLResolver.java:1745)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.queryStatementSet(GeneratedHQLResolver.java:1658)
at org.hibernate.hql.ast.origin.hql.resolve.GeneratedHQLResolver.statement(GeneratedHQLResolver.java:654)
at org.hibernate.hql.ast.spi.QueryResolverProcessor.process(QueryResolverProcessor.java:52)
at org.hibernate.hql.QueryParser.parseQuery(QueryParser.java:82)
at org.infinispan.query.dsl.embedded.impl.EmbeddedLuceneQueryBuilder.build(EmbeddedLuceneQueryBuilder.java:51)
at org.infinispan.query.dsl.embedded.impl.EmbeddedLuceneQueryBuilder.build(EmbeddedLuceneQueryBuilder.java:27)
at org.cismef.csecore.query.DatatypePropertySqlQueryMaker.getDatatypePropertyNoSqlQuery(DatatypePropertySqlQueryMaker.java:152)
at org.cismef.csecore.query.SQLQueryMaker.getNoSQLQuery(SQLQueryMaker.java:157)
at org.cismef.csecore.query.SQLQueryMaker.getNoSQLQuery(SQLQueryMaker.java:78)
at org.cismef.csecore.query.dcquery.DCQueryNode.getNoSql(DCQueryNode.java:60)
at org.cismef.csecore.query.dcquery.DCQueryTree.getNoSql(DCQueryTree.java:168)
at org.cismef.csecore.query.SQLQueryMaker.getNoSQLQuery(SQLQueryMaker.java:35)
at org.cismef.csecore.CSECore.search(CSECore.java:153)
... 25 more
我知道將分析設置為“否”可以解決此問題,但是我只想使用“分析”來改善性能。
有人有什么主意嗎?
Analyze與性能無關,除非您正在開發一項功能,該功能要求文本分析要更高效。
Infinispan Query允許您啟用(和自定義)Lucene Analyzer進行文本預處理,但是此功能只能通過Query Module文檔中描述的全文API來使用。
第10.9章中描述的更簡單的DSL要求您使用Analyzer = NO。 根據堆棧跟蹤,您正在使用簡單的DSL,因此,您可以使用更高級的Lucene查詢,或者必須禁用Analisys:這不會降低效率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.