Author: stianh
Date: 2007-05-09 12:55:47 +0200 (Wed, 09 May 2007)
New Revision: 5029
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
Log:
SEARCH-225 Added geosearch to yellow, white and address search.
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
2007-05-09 10:04:31 UTC (rev 5028)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
2007-05-09 10:55:47 UTC (rev 5029)
@@ -5,37 +5,40 @@
package no.schibstedsok.searchportal.mode.command;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
-import javax.measure.units.SI;
+
import no.fast.ds.search.ISearchParameters;
import no.fast.ds.search.SearchParameter;
import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
import no.schibstedsok.searchportal.result.SearchResult;
import no.schibstedsok.searchportal.result.SearchResultItem;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
+
import org.apache.log4j.Logger;
-import org.jscience.geography.coordinates.LatLong;
-import org.jscience.geography.coordinates.UTM;
-import org.jscience.geography.coordinates.crs.ReferenceEllipsoid;
/**
+ * Search command responsible for address search.
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Anders Johan Jamtli</a>
* @version <tt>$Revision$</tt>
*/
public class AddressSearchCommand extends AbstractSimpleFastSearchCommand{
-
- private static final Logger LOG =
Logger.getLogger(AddressSearchCommand.class);
- private static final String MIN_X = "minX";
- private static final String MAX_X = "maxX";
- private static final String MIN_Y = "minY";
- private static final String MAX_Y = "maxY";
+ /** Logger for this class. */
+ private static final Logger LOG =
Logger.getLogger(AddressSearchCommand.class);
+ /**
+ * Constructor for AddressSearchCommand.
+ * @param cxt Context to initialize the command.
+ */
public AddressSearchCommand(final Context cxt) {
super(cxt);
}
+ /**
+ * @see
no.schibstedsok.searchportal.mode.command.AbstractSearchCommand#execute()
+ */
public final SearchResult execute() {
SearchResult sr = super.execute();
@@ -58,73 +61,40 @@
return sr;
}
- private final class Point {
- private final double x;
- private final double y;
-
- public Point(final double x, final double y){
- this.x = x;
- this.y = y;
- }
-
- public final double getX() {
- return x;
- }
-
- public final double getY() {
- return y;
- }
- }
-
+ /**
+ * If the search is a GEO search, add required GEO search parameters.
+ * @see
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#setAdditionalParameters(ISearchParameters)
+ */
@Override
- protected void setAdditionalParameters(ISearchParameters params) {
+ protected void setAdditionalParameters(final ISearchParameters params) {
super.setAdditionalParameters(params);
-
- /* RETURNING, NOT FINISHED YET */
- if (true) return;
-
final ParametersDataObject pdo = datamodel.getParameters();
- if (pdo.getValue(MIN_X) == null || pdo.getValue(MAX_X).getString() ==
null || pdo.getValue(MIN_Y) == null
- || pdo.getValue(MAX_Y) == null) {
+
+ if(!GeoSearchUtil.isGeoSearch(pdo)){
return;
}
-
- final int minX = Integer.parseInt((String)
pdo.getValue(MIN_X).getString());
- final int maxX = Integer.parseInt((String)
pdo.getValue(MAX_X).getString());
- final int minY = Integer.parseInt((String)
pdo.getValue(MIN_Y).getString());
- final int maxY = Integer.parseInt((String)
pdo.getValue(MAX_Y).getString());
+
+ final String center = GeoSearchUtil.getCenter(pdo);
- final UTM utmMin = UTM.valueOf(33, 'W', minX, minY, SI.METER);
- final UTM utmMax = UTM.valueOf(33, 'W', maxX, maxY, SI.METER);
-
- final LatLong llMin = UTM.utmToLatLong(utmMin,
ReferenceEllipsoid.WGS84);
- final LatLong llMax = UTM.utmToLatLong(utmMax,
ReferenceEllipsoid.WGS84);
+ LOG.debug("center : " + center);
+ //TODO: calculate this.
+ final String restrictRadius = "10";
- final double llMinX = llMin.longitudeValue(SI.RADIAN);
- final double llMaxX = llMax.longitudeValue(SI.RADIAN);
- final double llMinY = llMin.latitudeValue(SI.RADIAN);
- final double llMaxY = llMax.latitudeValue(SI.RADIAN);
-
- LOG.debug("(" + minX + "," + minY + ") (" + llMinX + "," + llMinY +
")");
- LOG.debug("(" + maxX + "," + maxY + ") (" + llMaxX + "," + llMaxY +
")");
-
- final String center = new StringBuilder("(").append(llMinX + (llMaxX -
llMinX) / 2).append(",")
- .append(llMinY + (llMaxY - llMinY) / 2).append(")").toString();
- final String filterbox = new
StringBuilder("[(").append(llMinX).append(",").append(llMinY).append("):(")
-
.append(llMaxX).append(",").append(llMaxY).append(")]").toString();
-
+ params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
- params.setParameter(new SearchParameter("qtf_geosearch:filterbox",
filterbox));
}
-
- private final Point fromUtmToLatLong(final int x, final int y) {
- final UTM utm = UTM.valueOf(33, 'W', x, y, SI.METER);
-
- final LatLong ll = UTM.utmToLatLong(utm, ReferenceEllipsoid.WGS84);
-
- final double llX = Math.toDegrees(ll.longitudeValue(SI.RADIAN));
- final double llY = Math.toDegrees(ll.longitudeValue(SI.RADIAN));
-
- return new Point(llX, llY);
+
+ /**
+ * Override sortby when the search is a geo search.
+ * @see
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#getSortBy()
+ */
+ @Override
+ protected String getSortBy(){
+ final ParametersDataObject pdo = datamodel.getParameters();
+ if(GeoSearchUtil.isGeoSearch(pdo)){
+ return "geo_spec_sortable";
+ }
+ return super.getSortBy();
}
}
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-05-09 10:04:31 UTC (rev 5028)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-05-09 10:55:47 UTC (rev 5029)
@@ -10,6 +10,10 @@
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+
+import no.fast.ds.search.ISearchParameters;
+import no.fast.ds.search.SearchParameter;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
import
no.schibstedsok.searchportal.mode.command.AbstractSearchCommand.ReconstructedQuery;
import no.schibstedsok.searchportal.mode.config.CatalogueCommandConfig;
import no.schibstedsok.searchportal.query.AndClause;
@@ -35,6 +39,7 @@
import no.schibstedsok.searchportal.result.BasicSearchResultItem;
import no.schibstedsok.searchportal.result.CatalogueSearchResultItem;
import no.schibstedsok.searchportal.result.SearchResult;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
import org.apache.log4j.Logger;
@@ -124,6 +129,24 @@
*/
private static final String BLANK = "";
+ @Override
+ protected void setAdditionalParameters(final ISearchParameters params) {
+ super.setAdditionalParameters(params);
+ final ParametersDataObject pdo = datamodel.getParameters();
+
+ if(!GeoSearchUtil.isGeoSearch(pdo)){
+ return;
+ }
+
+ final String center = GeoSearchUtil.getCenter(pdo);
+
+ LOG.debug("center : " + center);
+
+ final String restrictRadius = "10";
+ params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
+ params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
+ }
/**
* Creates a new catalogue search command.
* @param cxt current context for this search command.
@@ -353,6 +376,8 @@
return query.toString();
}
+
+
/**
* Set what to sort the resultset by.
@@ -371,6 +396,10 @@
if ("name".equalsIgnoreCase(userSortBy)) {
sortBy = SORTBY_COMPANYNAME;
}
+ final ParametersDataObject pdo = datamodel.getParameters();
+ if(GeoSearchUtil.isGeoSearch(pdo)){
+ sortBy= GeoSearchUtil.GEO_SORT_BY;
+ }
return sortBy;
}
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
2007-05-09 10:04:31 UTC (rev 5028)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
2007-05-09 10:55:47 UTC (rev 5029)
@@ -8,12 +8,16 @@
package no.schibstedsok.searchportal.mode.command;
+import no.fast.ds.search.ISearchParameters;
+import no.fast.ds.search.SearchParameter;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
import no.schibstedsok.searchportal.query.IntegerClause;
import no.schibstedsok.searchportal.query.LeafClause;
import no.schibstedsok.searchportal.query.PhoneNumberClause;
import no.schibstedsok.searchportal.query.Visitor;
import no.schibstedsok.searchportal.query.XorClause;
import no.schibstedsok.searchportal.query.token.TokenPredicate;
+import no.schibstedsok.searchportal.util.GeoSearchUtil;
/**
*
@@ -32,6 +36,18 @@
super(cxt);
}
+
+ /**
+ * @see
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#getSortBy()
+ */
+ @Override
+ protected String getSortBy(){
+ final ParametersDataObject pdo = datamodel.getParameters();
+ if(GeoSearchUtil.isGeoSearch(pdo)){
+ return GeoSearchUtil.GEO_SORT_BY;
+ }
+ return super.getSortBy();
+ }
/**
* Adds non phonetic prefix to integer terms.
@@ -83,6 +99,26 @@
}
}
+
+ /**
+ * If the search is a GEO search, add required GEO search parameters.
+ * @see
no.schibstedsok.searchportal.mode.command.AbstractSimpleFastSearchCommand#setAdditionalParameters(ISearchParameters)
+ */
+ protected void setAdditionalParameters(ISearchParameters params) {
+ super.setAdditionalParameters(params);
+ final ParametersDataObject pdo = datamodel.getParameters();
+
+ if(!GeoSearchUtil.isGeoSearch(pdo)){
+ return;
+ }
+
+ final String center = GeoSearchUtil.getCenter(pdo);
+
+ final String restrictRadius = "10";
+ params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
+ params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
+ }
/**
* An implementation that ignores phrase searches.
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits