mirror of https://github.com/apache/lucene.git
LUCENE-4573 Improve SpatialExample.java to show distance value retrieval
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1413832 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
af004fd22b
commit
b2c51ff89a
|
@ -29,6 +29,7 @@ import org.apache.lucene.index.DirectoryReader;
|
|||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.index.IndexWriter;
|
||||
import org.apache.lucene.index.IndexWriterConfig;
|
||||
import org.apache.lucene.index.StoredDocument;
|
||||
import org.apache.lucene.queries.function.ValueSource;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
|
@ -54,6 +55,8 @@ import java.io.IOException;
|
|||
*/
|
||||
public class SpatialExample extends LuceneTestCase {
|
||||
|
||||
//Note: Test invoked via TestTestFramework.spatialExample()
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
new SpatialExample().test();
|
||||
}
|
||||
|
@ -148,14 +151,27 @@ public class SpatialExample extends LuceneTestCase {
|
|||
Filter filter = strategy.makeFilter(args);
|
||||
TopDocs docs = indexSearcher.search(new MatchAllDocsQuery(), filter, 10, idSort);
|
||||
assertDocMatchedIds(indexSearcher, docs, 2);
|
||||
//Now, lets get the distance for the 1st doc via computing from stored point value:
|
||||
// (this computation is usually not redundant)
|
||||
StoredDocument doc1 = indexSearcher.doc(docs.scoreDocs[0].doc);
|
||||
String doc1Str = doc1.getField(strategy.getFieldName()).stringValue();
|
||||
Point doc1Point = (Point) ctx.readShape(doc1Str);
|
||||
double doc1DistDEG = ctx.getDistCalc().distance(args.getShape().getCenter(), doc1Point);
|
||||
assertEquals(121.6d, DistanceUtils.degrees2Dist(doc1DistDEG, DistanceUtils.EARTH_MEAN_RADIUS_KM), 0.1);
|
||||
}
|
||||
//--Match all, order by distance
|
||||
//--Match all, order by distance ascending
|
||||
{
|
||||
Point pt = ctx.makePoint(60, -50);
|
||||
ValueSource valueSource = strategy.makeDistanceValueSource(pt);//the distance (in degrees)
|
||||
Sort reverseDistSort = new Sort(valueSource.getSortField(false)).rewrite(indexSearcher);//true=asc dist
|
||||
TopDocs docs = indexSearcher.search(new MatchAllDocsQuery(), 10, reverseDistSort);
|
||||
Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(indexSearcher);//false=asc dist
|
||||
TopDocs docs = indexSearcher.search(new MatchAllDocsQuery(), 10, distSort);
|
||||
assertDocMatchedIds(indexSearcher, docs, 4, 20, 2);
|
||||
//To get the distance, we could compute from stored values like earlier.
|
||||
// However in this example we sorted on it, and the distance will get
|
||||
// computed redundantly. If the distance is only needed for the top-X
|
||||
// search results then that's not a big deal. Alternatively, try wrapping
|
||||
// the ValueSource with CachingDoubleValueSource then retrieve the value
|
||||
// from the ValueSource now. See LUCENE-4541 for an example.
|
||||
}
|
||||
//demo arg parsing
|
||||
{
|
||||
|
|
|
@ -82,7 +82,10 @@ public abstract class StrategyTestCase extends SpatialTestCase {
|
|||
}
|
||||
|
||||
protected List<Document> getDocuments(String testDataFile) throws IOException {
|
||||
Iterator<SampleData> sampleData = getSampleData(testDataFile);
|
||||
return getDocuments(getSampleData(testDataFile));
|
||||
}
|
||||
|
||||
protected List<Document> getDocuments(Iterator<SampleData> sampleData) {
|
||||
List<Document> documents = new ArrayList<Document>();
|
||||
while (sampleData.hasNext()) {
|
||||
SampleData data = sampleData.next();
|
||||
|
|
|
@ -59,4 +59,11 @@ public class TestTestFramework extends LuceneTestCase {
|
|||
Assert.assertEquals( SpatialOperation.Intersects, sf.args.getOperation() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void spatialExample() throws IOException {
|
||||
//kind of a hack so that SpatialExample is tested despite
|
||||
// it not starting or ending with "Test".
|
||||
SpatialExample.main(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue