[mb-commits] r13727 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet servlet/src/test/java/org/musicbrainz/search/servlet

[email protected] Fri, 04 Oct 2013 10:23:59 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1VS2YB-0007gc-4W@wiley>
Author: ijabz
Date: 2013-10-04 10:23:58 +0000 (Fri, 04 Oct 2013)
New Revision: 13727

Modified:
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndex.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndexField.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/PlaceIndexTest.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceDismaxSearch.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceSearch.java
   search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindPlaceTest.java
Log:
SEARCH-325:Add area to output returned from place search

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndex.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndex.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -89,10 +89,12 @@
 
         addPreparedStatement("PLACE",
                         "SELECT p.coordinates, p.id, p.gid, p.name, p.address, pt.name as type, " +
-                        "   begin_date_year, begin_date_month, begin_date_day, " +
-                        "  end_date_year, end_date_month, end_date_day, ended" +
+                        "  p.begin_date_year, p.begin_date_month, p.begin_date_day, " +
+                        "  p.end_date_year, p.end_date_month, p.end_date_day, p.ended, p.comment, " +
+                        "  a1.gid as area_gid, a1.name as area_name, a1.sort_name as area_sortname " +
                         " FROM place p" +
                         "  LEFT JOIN place_type pt ON p.type = pt.id " +
+                        "  LEFT JOIN area a1 on p.area = a1.id" +
                         " WHERE p.id BETWEEN ? AND ? " +
                         " ORDER BY p.id");
 
@@ -186,6 +188,12 @@
         doc.addField(PlaceIndexField.PLACE, name);
         place.setName(name);
 
+        String comment = rs.getString("comment");
+        if (!Strings.isNullOrEmpty(comment)) {
+            doc.addField(PlaceIndexField.COMMENT, comment);
+            place.setDisambiguation(comment);
+        }
+
         String type = rs.getString("type");
         doc.addFieldOrUnknown(PlaceIndexField.TYPE, type);
         if (!Strings.isNullOrEmpty(type)) {
@@ -232,7 +240,22 @@
             doc.addField(PlaceIndexField.ADDRESS, address);
             place.setAddress(address);
         }
+        String areaId = rs.getString("area_gid");
+        if(areaId!=null) {
+            DefAreaElementInner area = of.createDefAreaElementInner();
+            area.setId(areaId);
+            String areaName = rs.getString("area_name");
+            area.setName(areaName);
+            doc.addFieldOrNoValue(ArtistIndexField.AREA, areaName);
+            String areaSortName = rs.getString("area_sortname");
+            area.setSortName(areaSortName);
+            place.setArea(area);
+        }
+        else {
+            doc.addField(ArtistIndexField.AREA, Index.NO_VALUE);
+        }
 
+
         boolean ended = rs.getBoolean("ended");
         doc.addFieldOrUnknown(ArtistIndexField.ENDED, Boolean.toString(ended));
 

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndexField.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndexField.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/PlaceIndexField.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -43,6 +43,8 @@
 	ID		    ("_id",		    MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
     PLACE_ID    ("pid",		    MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
     ALIAS		("alias",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
+    AREA		("area",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzAnalyzer()),
+    COMMENT		("comment",		MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED),
     PLACE       ("place",       MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzAnalyzer()),
     ADDRESS     ("address",     MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzAnalyzer()),
     BEGIN		("begin",		MusicBrainzFieldTypes.TEXT_NOT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/PlaceIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/PlaceIndexTest.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/PlaceIndexTest.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -6,11 +6,13 @@
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Test;
+import org.musicbrainz.mmd2.DefAreaElementInner;
 import org.musicbrainz.mmd2.Label;
 import org.musicbrainz.mmd2.Place;
 
 import java.sql.Statement;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 public class PlaceIndexTest extends AbstractIndexTest {
@@ -33,24 +35,16 @@
     private void addPlaceOne() throws Exception {
 
         Statement stmt = conn.createStatement();
-        stmt.addBatch("INSERT INTO place (coordinates, id, gid,name,address,type, begin_date_year, end_date_year) VALUES ((180.56,120),1, 'aa95182f-df0a-3ad6-8bfb-4b63482cd276', 'Manor Studios','1 New Street',1,1830,2020)");
+        stmt.addBatch("INSERT INTO area (id, gid, name, sort_name) VALUES (38, 'b8caa692-704d-412b-a410-4fbcf5b9c796','County of OxfordShire','Oxfordshire County')");
+        stmt.addBatch("INSERT INTO place (comment,coordinates, id, gid,name,address,type, begin_date_year, end_date_year,area) VALUES ('comment',(180.56,120),1, 'aa95182f-df0a-3ad6-8bfb-4b63482cd276', 'Manor Studios','1 New Street',1,1830,2020,38)");
         stmt.addBatch("INSERT INTO place_type(id, name) VALUES (1, 'Studio')");
         stmt.addBatch("INSERT INTO place_alias (id, place, name, sort_name, primary_for_locale, locale, type ) VALUES (3, 1, 'Manox','Manoy', true, 'en',1)");
         stmt.executeBatch();
         stmt.close();
     }
 
-    private void addPlaceTwo() throws Exception {
 
-        Statement stmt = conn.createStatement();
-        stmt.addBatch("INSERT INTO place (id, gid,name,address,type, begin_date_year, end_date_year) VALUES (1, 'aa95182f-df0a-3ad6-8bfb-4b63482cd276', 'Manor Studios','1 New Street',1,1830,2020)");
-        stmt.addBatch("INSERT INTO place_type(id, name) VALUES (1, 'Studio')");
-        stmt.addBatch("INSERT INTO place_alias (id, place, name, sort_name, primary_for_locale, locale, type ) VALUES (3, 1, 'Manox','Manoy', true, 'en',1)");
-        stmt.executeBatch();
-        stmt.close();
-    }
 
-
     @Test
     public void testIndexPlaceName() throws Exception {
 
@@ -181,10 +175,41 @@
         ir.close();
     }
 
+    @Test
+    public void testIndexPlaceAreaName() throws Exception {
 
+        addPlaceOne();
+        RAMDirectory ramDir = new RAMDirectory();
+        createIndex(ramDir);
 
+        IndexReader ir = DirectoryReader.open(ramDir);
+        assertEquals(2, ir.numDocs());
+        {
+            checkTerm(ir, PlaceIndexField.AREA, "county");
+            checkTermX(ir, PlaceIndexField.AREA, "of", 1);
+            checkTermX(ir, PlaceIndexField.AREA, "oxfordshire", 2);
 
+        }
+        ir.close();
+    }
+
+
     @Test
+    public void testIndexPlaceComment() throws Exception {
+
+        addPlaceOne();
+        RAMDirectory ramDir = new RAMDirectory();
+        createIndex(ramDir);
+
+        IndexReader ir = DirectoryReader.open(ramDir);
+        assertEquals(2, ir.numDocs());
+        {
+            checkTerm(ir, PlaceIndexField.COMMENT, "comment");
+        }
+        ir.close();
+    }
+
+    @Test
     public void testStoredIndexPlace() throws Exception {
 
         addPlaceOne();
@@ -203,13 +228,20 @@
             assertEquals("180.56", place.getCoordinates().getLatitude());
             assertEquals("120.0", place.getCoordinates().getLongitude());
 
-            assertNull(place.getDisambiguation());
+            assertEquals("comment",place.getDisambiguation());
             assertEquals("Studio", place.getType());
             assertEquals("Manox",place.getAliasList().getAlias().get(0).getContent());
             assertEquals("Manoy",place.getAliasList().getAlias().get(0).getSortName());
             assertEquals("en",place.getAliasList().getAlias().get(0).getLocale());
 
+            DefAreaElementInner area = place.getArea();
+            assertNotNull(area);
+            assertEquals("b8caa692-704d-412b-a410-4fbcf5b9c796", area.getId());
+            assertEquals("County of OxfordShire", area.getName());
+            assertEquals("Oxfordshire County", area.getSortName());
 
+
+
         }
         ir.close();
     }

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceDismaxSearch.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceDismaxSearch.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceDismaxSearch.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -40,6 +40,7 @@
   protected DismaxSearcher initDismaxSearcher() {
     Map<String, DismaxAlias.AliasField> fieldBoosts = new HashMap<String, DismaxAlias.AliasField>(3);
     fieldBoosts.put(PlaceIndexField.PLACE.getName(), new DismaxAlias.AliasField(true, 1.3f));
+    fieldBoosts.put(PlaceIndexField.AREA.getName(), new DismaxAlias.AliasField(true, 1.1f));
     fieldBoosts.put(PlaceIndexField.ALIAS.getName(), new DismaxAlias.AliasField(true, 0.9f));
     fieldBoosts.put(PlaceIndexField.ADDRESS.getName(), new DismaxAlias.AliasField(true, 0.8f));
 

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceSearch.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceSearch.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceSearch.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -19,6 +19,7 @@
     defaultFields = new ArrayList<String>();
     defaultFields.add(PlaceIndexField.PLACE.getName());
     defaultFields.add(PlaceIndexField.ALIAS.getName());
+    defaultFields.add(PlaceIndexField.AREA.getName());
     defaultFields.add(PlaceIndexField.ADDRESS.getName());
   }
 

Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindPlaceTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindPlaceTest.java	2013-10-04 06:44:23 UTC (rev 13726)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindPlaceTest.java	2013-10-04 10:23:58 UTC (rev 13727)
@@ -80,7 +80,17 @@
             doc.addField(PlaceIndexField.TYPE,"Country");
             place.setType("Country");
 
+            doc.addField(PlaceIndexField.COMMENT,"A comment");
+            place.setDisambiguation("A comment");
 
+            doc.addField(PlaceIndexField.AREA,"Afghanistan");
+            DefAreaElementInner area = of.createDefAreaElementInner();
+            area.setId("ff571ff4-04cb-4b9c-8a1c-354c330f863c");
+            area.setName("Afghanistan");
+            area.setSortName("Afghanistan");
+            place.setArea(area);
+
+
             doc.addField(PlaceIndexField.PLACE_STORE, MMDSerializer.serialize(place));
             writer.addDocument(doc.getLuceneDocument());
         }
@@ -175,6 +185,27 @@
     }
 
     @Test
+    public void testFindPlaceByArea() throws Exception {
+        Results res = ss.search("area:afghanistan", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(PlaceIndexField.PLACE_ID));
+        assertEquals("Afghanistan", doc.get(PlaceIndexField.PLACE));
+    }
+
+    @Test
+    public void testFindPlaceByComment() throws Exception {
+        Results res = ss.search("comment:comment", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        Result result = res.results.get(0);
+        MbDocument doc = result.getDoc();
+        assertEquals("ff571ff4-04cb-4b9c-8a1c-354c330f863c", doc.get(PlaceIndexField.PLACE_ID));
+        assertEquals("Afghanistan", doc.get(PlaceIndexField.PLACE));
+    }
+
+
+    @Test
     public void testFindPlaceByBegin() throws Exception {
         Results res = ss.search("begin:1993", 0, 10);
         assertEquals(1, res.getTotalHits());
@@ -296,11 +327,12 @@
         assertTrue(output.contains("type=\"Country\""));
         assertTrue(output.contains("<name>Afghanistan</name>"));
         assertTrue(output.contains("<alias sort-name=\"Afghan\">Afghany</alias></alias-list>"));
-
-        assertTrue(output.contains("<begin>1993</begin"));
+        assertTrue(output.contains("<begin>1993</begin>"));
         assertTrue(output.contains("<end>2004</end>"));
         assertTrue(output.contains("<ended>true</ended>"));
         assertTrue(output.contains("<coordinates><latitude>-180.45</latitude><longitude>120</longitude></coordinates>"));
+        assertTrue(output.contains("<disambiguation>A comment</disambiguation>"));
+        assertTrue(output.contains("<area id=\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\">"));
 
     }
 
@@ -342,6 +374,8 @@
         assertTrue(output.contains("life-span\":{\"begin\":\"1993\""));
         assertTrue(output.contains("\"ended\":\"true\""));
         assertTrue(output.contains("\"coordinates\":{\"latitude\":\"-180.45\",\"longitude\":\"120\"},"));
+        assertTrue(output.contains("\"disambiguation\":\"A comment\","));
+        assertTrue(output.contains("\"area\":{\"id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\","));
 
     }
 
@@ -369,6 +403,8 @@
         assertTrue(output.contains("\"ended\":true"));
         assertTrue(output.contains("\"end\":\"2004\""));
         assertTrue(output.contains("coordinates\":{\"latitude\":\"-180.45\",\"longitude\":\"120\"}"));
+        assertTrue(output.contains("\"disambiguation\":\"A comment\","));
+        assertTrue(output.contains("\"area\":{\"id\":\"ff571ff4-04cb-4b9c-8a1c-354c330f863c\","));
     }
 
     /**