Question

I'm using Infinispan 6.0 and I want to use Infinispan’s Query DSL for searching.

I saw the analyze.YES in Hibernate DSL will make sense to analyze a text field, so i want to use it for searching title and subtitle.

Here is the code for setting properties:

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;
}

And when I try the query:

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

I know set the analyze to No can solve this problem, but I just want to use the Analyze to improve the performance.

Anyone have some ideas????

Was it helpful?

Solution

Analyze is not related to performance, unless you're developing a feature which requires text Analysis to be more efficient.

Infinispan Query allows you to enable (and customize) the Lucene Analyzer to use for text pre-processing but this feature is meant to use exclusively via the full-text API described at Query Module documentation.

The simpler DSL described in Chapter 10.9 requires you to use Analyzer=NO. You are using the simple DSL according to the stacktrace, so either you use the more advanced Lucene queries or you have to disable Analisys: it won't be less efficient.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top