We are using the hibernate search which is based on lucene as the search engine to build a full text search for our position-related data in the MYSQL db. This is the main structure of the table(it save the id,coordinate and name of one Surface_Feature): +----+--------+---------+------------+ | id | co_x | co_y | name | +----+--------+---------+------------+ | 1 | 11111 | 22222 | Disney Park| +----+--------+---------+------------+ Then these attributes are mapped as the fields in lucene by hibernate search.And I do the following configuration to the field: ..... field_co_x -->Store.Yes,Index.UN_TOKENIZED. field_co_y -->Store.Yes,Index.UN_TOKENIZED. field_name -->Store.Yes,Index.TOKENIZED. ...
Then we want to query the Surface_Features basing on a special scope. For example: 1) Range search if we want to search the Surface_Feature whose co_x is between [minX,maxX] and whose iny is between [minY,maxY],for this requirement I thought the RangeTermQuery. --code snippet-- TermRangeQuery trq_x=new TermRangeQuery("co_x ", minX, maxX, ture, true); TermRangeQuery trq_Y=new TermRangeQuery("co_y", minY, maxY, ture, true); BooleanQuery query=new BooleanQuery(); query.add(trq_x, BooleanClause.Occur.MUST); query.add(trq_Y,BooleanClause.Occur.MUST); Is this right? 2) Anchor-distance based search But I have no idea about how to query features basing on a anchor and a distance. That'to say I want to search features who are located inside the circle defined by the anchor and the distance. It seems that the sphinx provide a function named SetGeoAnchor(),so I wonder if lucene can implement the same requirement? BWT,for some condition-required search I can make the condition as a filter and then filter the result. Also I can build a BooleanQuery according to the condition just like the code in the range search,I wonder which is better?