Infinispan Hibernate поиск: org.hibernate.hql.ParsingException: HQLLUCN000003

1

Я использую Infinispan 6.0, и я хочу использовать DSL Infinispans Query для поиска.

Я видел анализ. YES в 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

Я знаю, что анализ анализа "Нет" может решить эту проблему, но я просто хочу использовать Analyze для повышения производительности.

У кого-нибудь есть идеи????

Теги:
hibernate
infinispan

1 ответ

0
Лучший ответ

Анализ не связан с производительностью, если только вы не разрабатываете функцию, которая требует более эффективного анализа текста.

Infinispan Query позволяет включать (и настраивать) Lucene Analyzer для предварительной обработки текста, но эта функция предназначена исключительно для использования в полнотекстовом API, описанном в документации модуля Query Module.

Для более простой DSL, описанной в главе 10.9, требуется использовать Analyzer = NO. Вы используете простой DSL в соответствии со стеком, так что либо вы используете более сложные запросы Lucene, либо вы должны отключить Analisys: он не будет менее эффективным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню