Rechecked my lucene index on Geode and they are as follows: create lucene index --name=stationNameIndex --region=stations-region --field=stationName,longitude,latitude --analyzer=org.apache.lucene.analysis.en.EnglishAnalyzer,DEFAULT,DEFAULT
and in java code queryString = "stationName: 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(); }); luceneQuery.findValues() throws Serialization exception but when I use the LuceneQuery<Long, Station> luceneQuery = luceneService .createLuceneQueryFactory() .setLimit(100) .create( "stationNameIndex", "stations-region", queryString, "stationName" }); It works. What has gone wrong? On Wed, Jan 29, 2020 at 9:19 PM Xiaojian Zhou <gz...@pivotal.io> wrote: > You should use the stationName not station if your object is indexed on > the field, i.e. stationName. > > Even class Station implements DataSerializable, lucene index are still > only index on the object's fields, such as stationName. > > On Wed, Jan 29, 2020 at 1:04 PM vas aj <vasudevan.a...@gmail.com> wrote: > >> Sorry >> queryString = "station: piccadilly*" to get the mentioned error. >> >> On Wed, Jan 29, 2020 at 9:01 PM vas aj <vasudevan.a...@gmail.com> wrote: >> >>> 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 >>>>>>> >>>>>>