You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by yang Yang <m4...@gmail.com> on 2010/11/18 03:08:57 UTC
lucene anchor-distance based search
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?
Re: lucene anchor-distance based search
Posted by yang Yang <m4...@gmail.com>.
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?
2010/11/18 yang Yang <m4...@gmail.com>
> Thank you very much!!! :)
>
> I will have a look at the docs .
>
> 2010/11/18 Anshum <an...@gmail.com>
>
> Hi.
>> The way you're forming the BooleanQuery seems fine to me (minus the ture
>> should've been true, and 'm guessing its a typo).
>> About the geo-spatial search, you may have a look at the various
>> approaches
>> there are for the same. Have a look at the contrib module in lucene.
>> http://wiki.apache.org/lucene-java/SpatialSearch
>> For your understanding, you could have a look at the bounding box
>> approach.
>>
>> --
>> Anshum Gupta
>> http://ai-cafe.blogspot.com
>>
>>
>> On Thu, Nov 18, 2010 at 7:38 AM, yang Yang <m4...@gmail.com> wrote:
>>
>> > 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?
>> >
>>
>
>
Re: lucene anchor-distance based search
Posted by yang Yang <m4...@gmail.com>.
Thank you very much!!! :)
I will have a look at the docs .
2010/11/18 Anshum <an...@gmail.com>
> Hi.
> The way you're forming the BooleanQuery seems fine to me (minus the ture
> should've been true, and 'm guessing its a typo).
> About the geo-spatial search, you may have a look at the various approaches
> there are for the same. Have a look at the contrib module in lucene.
> http://wiki.apache.org/lucene-java/SpatialSearch
> For your understanding, you could have a look at the bounding box approach.
>
> --
> Anshum Gupta
> http://ai-cafe.blogspot.com
>
>
> On Thu, Nov 18, 2010 at 7:38 AM, yang Yang <m4...@gmail.com> wrote:
>
> > 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?
> >
>
Re: lucene anchor-distance based search
Posted by Anshum <an...@gmail.com>.
Hi.
The way you're forming the BooleanQuery seems fine to me (minus the ture
should've been true, and 'm guessing its a typo).
About the geo-spatial search, you may have a look at the various approaches
there are for the same. Have a look at the contrib module in lucene.
http://wiki.apache.org/lucene-java/SpatialSearch
For your understanding, you could have a look at the bounding box approach.
--
Anshum Gupta
http://ai-cafe.blogspot.com
On Thu, Nov 18, 2010 at 7:38 AM, yang Yang <m4...@gmail.com> wrote:
> 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?
>