簡體   English   中英

Infinispan Hibernate搜索:org.hibernate.hql.ParsingException:HQLLUCN000003

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM