Hi team, The below code :
queryString = "piccadilly*"; Query queryToExecute = new StandardQueryParser().parse(queryString, "stationNameIndex"); LuceneQuery<Long, Station> luceneQuery = luceneService .createLuceneQueryFactory() .setLimit(100) .create( "stationNameIndex", "stations-region", index -> { return new BooleanQuery.Builder() .add(queryToExecute, BooleanClause.Occur.MUST) .build(); }); Collection<Station> stations = luceneQuery.findValues(); *throws the below error : * Error while querying => {} org.apache.geode.SerializationException: failed serializing object at org.apache.geode.internal.cache.tier.sockets.Message.serializeAndAddPart(Message.java:408) at org.apache.geode.internal.cache.tier.sockets.Message.addObjPart(Message.java:350) at org.apache.geode.internal.cache.tier.sockets.Message.addObjPart(Message.java:329) at org.apache.geode.cache.client.internal.ExecuteRegionFunctionSingleHopOp$ExecuteRegionFunctionSingleHopOpImpl.<init>(ExecuteRegionFunctionSingleHopOp.java:180) at org.apache.geode.cache.client.internal.ServerRegionProxy.lambda$executeFunction$1(ServerRegionProxy.java:699) at org.apache.geode.cache.client.internal.ExecuteRegionFunctionSingleHopOp.constructAndGetExecuteFunctionTasks(ExecuteRegionFunctionSingleHopOp.java:131) at org.apache.geode.cache.client.internal.ExecuteRegionFunctionSingleHopOp.execute(ExecuteRegionFunctionSingleHopOp.java:84) at org.apache.geode.cache.client.internal.ServerRegionProxy.executeFunction(ServerRegionProxy.java:701) at org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor.executeOnServer(ServerRegionFunctionExecutor.java:200) at org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor.executeFunction(ServerRegionFunctionExecutor.java:154) at org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor.execute(ServerRegionFunctionExecutor.java:379) at org.apache.geode.cache.lucene.internal.LuceneQueryImpl.findTopEntries(LuceneQueryImpl.java:121) at org.apache.geode.cache.lucene.internal.LuceneQueryImpl.findPages(LuceneQueryImpl.java:99) at org.apache.geode.cache.lucene.internal.LuceneQueryImpl.findResults(LuceneQueryImpl.java:85) at org.apache.geode.cache.lucene.internal.LuceneQueryImpl.findValues(LuceneQueryImpl.java:78) whereas LuceneQuery<Long, Station> luceneQuery = luceneService .createLuceneQueryFactory() .setLimit(100) .create( "stationNameIndex", "stations-region", queryString, "stationName" }); works perfectly & Station implements org.apache.geode.DataSerializable. What am I missing?. Please help. Regards, Aj On Tue, Jan 28, 2020 at 11:31 PM Xiaojian Zhou <gz...@pivotal.io> wrote: > Maybe you should change one or both of the "MUST" to "SHOULD". And it's > better to switch the order of the 2 subqueries. > > > On Tue, Jan 28, 2020 at 2:23 PM vas aj <vasudevan.a...@gmail.com> wrote: > >> Thanks Dan for the quick help. >> However the query failed. >> >> Working on the same. >> >> On Tue, 28 Jan 2020, 19:55 Dan Smith, <dsm...@pivotal.io> wrote: >> >>> I think you could probably use a BooleanQuery to do this. Something like >>> this, although I haven't tested it. Your LuceneQuery1 just results in a >>> call to StandardQueryParser.parse, so you can combine that with your >>> spatial query: >>> >>> LuceneQuery<Long, Station> luceneQuery2 = >>> luceneService >>> .createLuceneQueryFactory() >>> .create("stationNameIndex", "stations-region", index -> { >>> BooleanQuery query = new BooleanQuery(); >>> query.add(new StandardQueryParser().parse(queryString, >>> name), BooleanQuery.Occur.MUST); >>> query.add(SpatialHelper.findWithin(-122.8515139, 45.5099231, >>> 0.5), , BooleanQuery.Occur.MUST); >>> return query; >>> } >>> >>> On Tue, Jan 28, 2020 at 11:36 AM vas aj <vasudevan.a...@gmail.com> >>> wrote: >>> >>>> Hi team, >>>> >>>> I want to execute a *LuceneQuery* that searches both a >>>> queryString(E.g. "station:Piccadilly*") as well as nearest station within >>>> .5 miles.(E.g. SpatialHelper.findWithin(lat, long, 0.5)) >>>> >>>> In other words, is there any means of combining *luceneQuery1* & >>>> *luceneQuery2* and executing them as >>>> Collection<Station> nearestStations = *luceneQuery*.findValues(); >>>> >>>> where luceneQuery = luceneQuery1 + luceneQuery2 >>>> >>>> *LuceneQuery1* >>>> LuceneQuery<Long, Station> luceneQuery1 = >>>> luceneService >>>> .createLuceneQueryFactory() >>>> .setLimit(100) >>>> .create("stationNameIndex", "stations-region", queryString, >>>> "name"); >>>> >>>> *LuceneQuery2* >>>> LuceneQuery<Long, Station> luceneQuery2 = >>>> luceneService >>>> .createLuceneQueryFactory() >>>> .create("stationNameIndex", "stations-region", index -> >>>> SpatialHelper.findWithin(-122.8515139, 45.5099231, 0.5); >>>> >>>> Regards >>>> Aj >>>> >>>