diff --git a/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java b/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java index d244d60a06..520bfad345 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/SearchUICore.java @@ -866,9 +866,9 @@ public class SearchUICore { // -1 - means 1st is less than 2nd return topVisible1 ? -1 : 1; } -// if (o1.getUnknownPhraseMatchWeight() != o2.getUnknownPhraseMatchWeight()) { -// return -Double.compare(o1.getUnknownPhraseMatchWeight(), o2.getUnknownPhraseMatchWeight()); -// } + if (o1.getUnknownPhraseMatchWeight() != o2.getUnknownPhraseMatchWeight()) { + return -Double.compare(o1.getUnknownPhraseMatchWeight(), o2.getUnknownPhraseMatchWeight()); + } if (o1.getFoundWordCount() != o2.getFoundWordCount()) { return -Algorithms.compare(o1.getFoundWordCount(), o2.getFoundWordCount()); } @@ -879,25 +879,24 @@ public class SearchUICore { return Double.compare(s1, s2); } } - int st1 = o1.localeName == null ? -10000 : Algorithms.extractFirstIntegerNumber(o1.localeName); - int st2 = o2.localeName == null ? -10000 : Algorithms.extractFirstIntegerNumber(o2.localeName); + String localeName1 = o1.localeName == null ? "" : o1.localeName; + String localeName2 = o2.localeName == null ? "" : o2.localeName; + int st1 = Algorithms.extractFirstIntegerNumber(localeName1); + int st2 = Algorithms.extractFirstIntegerNumber(localeName2); if (st1 != st2) { return Algorithms.compare(st1, st2); } - String localeName1 = o1.localeName == null ? "" : o1.localeName; - String localeName2 = o2.localeName == null ? "" : o2.localeName; double s1 = o1.getSearchDistance(loc, 1); double s2 = o2.getSearchDistance(loc, 1); - // ???? -// if (o1.parentSearchResult != null && o2.parentSearchResult != null) { -// if (o1.parentSearchResult == o2.parentSearchResult) { -// int cmp = collator.compare(localeName1, localeName2); -// if (cmp != 0) { -// return cmp; -// } -// } -// return Double.compare(s1, s2); -// } + if (o1.parentSearchResult != null && o2.parentSearchResult != null) { + if (o1.parentSearchResult == o2.parentSearchResult) { + int cmp = collator.compare(localeName1, localeName2); + if (cmp != 0) { + return cmp; + } + } + return Double.compare(s1, s2); + } int cmp = collator.compare(localeName1, localeName2); if (cmp != 0) { return cmp; @@ -905,7 +904,7 @@ public class SearchUICore { if (s1 != s2) { return Double.compare(s1, s2); } - boolean am1 = o2.object instanceof Amenity; + boolean am1 = o1.object instanceof Amenity; boolean am2 = o2.object instanceof Amenity; if (am1 != am2) { return Boolean.compare(am1, am2); diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchResult.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchResult.java index b08d901bdc..93f0acfafd 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchResult.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchResult.java @@ -29,26 +29,26 @@ public class SearchResult { public boolean firstUnknownWordMatches = true; public boolean unknownPhraseMatches = false; + public SearchResult(SearchPhrase sp) { + this.requiredSearchPhrase = sp; + } + public double getUnknownPhraseMatchWeight() { + return getUnknownPhraseMatchWeight(false); + } + + private double getUnknownPhraseMatchWeight(boolean isHouse) { double res = 0; - boolean isHouse = objectType == ObjectType.HOUSE; + isHouse = isHouse || objectType == ObjectType.HOUSE; if (unknownPhraseMatches) { - res = ObjectType.getTypeWeight(objectType); + res = isHouse ? ObjectType.getTypeWeight(ObjectType.HOUSE) : ObjectType.getTypeWeight(objectType); } - if (res == 0 && parentSearchResult != null && parentSearchResult.unknownPhraseMatches) { - if (isHouse && parentSearchResult.objectType == ObjectType.STREET) { - res = ObjectType.getTypeWeight(ObjectType.HOUSE); - } else { - res = ObjectType.getTypeWeight(parentSearchResult.objectType); - } + if (res == 0 && parentSearchResult != null) { + return parentSearchResult.getUnknownPhraseMatchWeight(isHouse); } return res; } - public SearchResult(SearchPhrase sp) { - this.requiredSearchPhrase = sp; - } - public int getFoundWordCount() { int inc = 0; if (firstUnknownWordMatches) { diff --git a/OsmAnd-java/src/test/java/net/osmand/search/SearchCoreUITest.java b/OsmAnd-java/src/test/java/net/osmand/search/SearchCoreUITest.java index 48bd610345..80d92b7bf1 100644 --- a/OsmAnd-java/src/test/java/net/osmand/search/SearchCoreUITest.java +++ b/OsmAnd-java/src/test/java/net/osmand/search/SearchCoreUITest.java @@ -222,8 +222,7 @@ public class SearchCoreUITest { }); if (files != null) { for (File f : files) { - // FIXME -// testSearchImpl(f); + testSearchImpl(f); } } }