2014-04-01 60 views
1

我正在使用Infinispan 6.0,我想使用Infinispan的Query DSL进行搜索。Infinispan Hibernate搜索:org.hibernate.hql.ParsingException:HQLLUCN000003

我看到了分析。在Hibernate DSL中,分析文本字段是有意义的,所以我想用它来搜索标题和副标题。

下面是设置属性代码:

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 

我知道设定的分析来没有可以解决这个问题,但我只是想使用分析来改善性能。

任何人有一些想法?

回答

0

分析与性能无关,除非您开发的功能要求文本分析更高效。

Infinispan Query允许您启用(并自定义)Lucene分析器以用于文本预处理,但此功能仅用于通过在Query Module documentation上描述的全文API使用。

Chapter 10.9中描述的更简单的DSL要求您使用Analyzer = NO。根据堆栈跟踪使用简单的DSL,因此无论是使用更高级的Lucene查询,还是必须禁用Analisys:效率都不高。