[mb-commits] r13709 - in search_server/trunk: index/src/main/java/org/musicbrainz/search 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/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/main/resources servlet/src/test/java/org/musicbrainz/search/servlet

[email protected] Mon, 30 Sep 2013 13:43:51 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1VQdlP-00067X-HI@wiley>
Author: ijabz
Date: 2013-09-30 13:43:50 +0000 (Mon, 30 Sep 2013)
New Revision: 13709

Added:
   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/PlaceQueryParser.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/PlaceSearch.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/PlaceWriter.java
   search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindPlaceTest.java
Modified:
   search_server/trunk/index/src/main/java/org/musicbrainz/search/MbDocument.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/AreaIndex.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexBuilder.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexOptions.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
   search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResourceType.java
   search_server/trunk/servlet/src/main/resources/oxml.xml
Log:
SEARCH-321:Places Support

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/MbDocument.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/MbDocument.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/MbDocument.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -94,6 +94,20 @@
     }
 
     /**
+     * Add float numeric field, handled specially so that ranges searches work properly
+     *
+     * @param field
+     * @param value
+     */
+    public void addNumericField(IndexField field,Float value) {
+
+        BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT);
+        NumericUtils.intToPrefixCoded(NumericUtils.floatToSortableInt(value), 0, bytes);
+        doc.add(new Field(field.getName(),bytes.utf8ToString(), field.getFieldType()));
+    }
+
+
+    /**
      * Add long numeric field, handled specially so that ranges searches work properly
      *
      * @param field

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/AreaIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/AreaIndex.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/AreaIndex.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -63,7 +63,7 @@
 	}
 	
     public Analyzer getAnalyzer() {
-        return DatabaseIndex.getAnalyzer(TagIndexField.class);
+        return DatabaseIndex.getAnalyzer(AreaIndexField.class);
     }
 
     public int getMaxId() throws SQLException {
@@ -84,7 +84,7 @@
     public void init(IndexWriter indexWriter, boolean isUpdater) throws SQLException {
 
 
-        addPreparedStatement("AREA",
+        addPreparedStatement("PLACE",
                         "SELECT a.id, a.gid, a.name, a.sort_name, at.name as type, " +
                         "   begin_date_year, begin_date_month, begin_date_day, " +
                         "  end_date_year, end_date_month, end_date_day, ended" +
@@ -217,7 +217,7 @@
             iso3List.getIso31663Code().add(rs.getString("code"));
         }
 
-        st = getPreparedStatement("AREA");
+        st = getPreparedStatement("PLACE");
         st.setInt(1, min);
         st.setInt(2, max);
         rs = st.executeQuery();

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexBuilder.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexBuilder.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexBuilder.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -121,6 +121,7 @@
                 new ReleaseGroupIndex(mainDbConn),
                 new LabelIndex(mainDbConn),
                 new AreaIndex(mainDbConn),
+                new PlaceIndex(mainDbConn),
                 new AnnotationIndex(mainDbConn),
                 new TagIndex(mainDbConn),
                 new CDStubIndex(mainDbConn), //Note different db

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexOptions.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexOptions.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/IndexOptions.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -69,8 +69,8 @@
     public String getFreeDBDump() { return freeDBDump; }
 
     // Selection of indexes to build
-    @Option(name="--indexes", usage="A comma-separated list of indexes to build (area,artist,releasegroup,release,recording,label,work,tag,annotation,cdstub,freedb)")
-    private String indexes = "area,artist,label,release,recording,releasegroup,work,tag,annotation,cdstub,freedb";
+    @Option(name="--indexes", usage="A comma-separated list of indexes to build (area,artist,place,releasegroup,release,recording,label,work,tag,annotation,cdstub,freedb)")
+    private String indexes = "area,artist,label,place,release,recording,releasegroup,work,tag,annotation,cdstub,freedb";
     public ArrayList<String> selectedIndexes() { return new ArrayList<String>(Arrays.asList(indexes.split(","))); }
     public boolean buildIndex(String indexName) { return selectedIndexes().contains(indexName); }
 

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -71,6 +71,15 @@
         assertEquals(value, NumericUtils.prefixCodedToInt(termsEnum.term()));
     }
 
+    protected void checkTerm(IndexReader ir, IndexField field, float value) throws IOException {
+
+        Fields fields = MultiFields.getFields(ir);
+        Terms terms = fields.terms(field.getName());
+        TermsEnum termsEnum = terms.iterator(null);
+        termsEnum.next();
+        assertEquals(value, NumericUtils.sortableIntToFloat(NumericUtils.prefixCodedToInt(termsEnum.term())),0);
+    }
+
     /** Check nth term of given field, terms are listed lexigraphically
      *  Use when field is indexed. but not stored
      *
@@ -183,7 +192,24 @@
                 stmt.addBatch("DROP TABLE link_type");
                 stmt.addBatch("DROP TABLE link_attribute");
                 stmt.addBatch("DROP TABLE link_attribute_type");
-                
+
+                stmt.addBatch("DROP TABLE place");
+                stmt.addBatch("DROP TABLE place_gid_redirect");
+                stmt.addBatch("DROP TABLE place_type");
+                stmt.addBatch("DROP TABLE place_alias");
+                stmt.addBatch("DROP TABLE place_alias_type");
+                stmt.addBatch("DROP TABLE place_annotation");
+                stmt.addBatch("DROP TABLE l_area_place");
+                stmt.addBatch("DROP TABLE l_artist_place");
+                stmt.addBatch("DROP TABLE l_label_place");
+                stmt.addBatch("DROP TABLE l_place_place");
+                stmt.addBatch("DROP TABLE l_place_recording");
+                stmt.addBatch("DROP TABLE l_place_release");
+                stmt.addBatch("DROP TABLE l_place_release_group");
+                stmt.addBatch("DROP TABLE l_place_url");
+                stmt.addBatch("DROP TABLE l_place_work");
+                stmt.addBatch("DROP TABLE l_place_tag");
+
                 stmt.addBatch("DROP TABLE replication_control");
                 stmt.addBatch("DROP TABLE dbmirror_pending");
                 stmt.addBatch("DROP TABLE dbmirror_pendingdata");
@@ -211,6 +237,7 @@
             setupAnnotationTables(stmt);
             setupCDStubTables(stmt);
             setupWorkTables(stmt);
+            setupPlaceTables(stmt);
             setupReplicationTables(stmt);
             
             insertReferenceData(stmt);
@@ -860,6 +887,178 @@
                 ")");
     }
 
+    protected void setupPlaceTables(Statement stmt) throws Exception {
+
+        PlaceIndex.isUsingH2Db=true;
+
+        stmt.addBatch("create domain point as array check (array_length(value) = 2)");
+        stmt.addBatch("CREATE TABLE place (" +
+                "    id                  SERIAL," +
+                "    gid                 uuid," +
+                "    name                VARCHAR," +
+                "    type                INTEGER," +
+                "    address             VARCHAR  ," +
+                "    area                INTEGER," +
+                "    coordinates         POINT," +
+                "    comment             VARCHAR(255)," +
+                "    edits_pending       INTEGER  ," +
+                "    last_updated        TIMESTAMP," +
+                "    begin_date_year     SMALLINT," +
+                "    begin_date_month    SMALLINT," +
+                "    begin_date_day      SMALLINT," +
+                "    end_date_year       SMALLINT," +
+                "    end_date_month      SMALLINT," +
+                "    end_date_day        SMALLINT," +
+                "    ended               BOOLEAN " +
+                ")");
+
+        stmt.addBatch("CREATE TABLE place_gid_redirect" +
+                "(" +
+                "    gid                 UUID NOT NULL," +
+                "    new_id              INTEGER NOT NULL," +
+                "    created             TIMESTAMP" +
+                ")");
+
+
+
+        stmt.addBatch("CREATE TABLE place_type (" +
+                "    id                  SERIAL," +
+                "    name                VARCHAR(255) NOT NULL" +
+                ")");
+
+
+        stmt.addBatch("CREATE TABLE place_alias" +
+                "(" +
+                "    id                  SERIAL," +
+                "    place               INTEGER NOT NULL," +
+                "    name                VARCHAR NOT NULL," +
+                "    locale              VARCHAR," +
+                "    edits_pending       INTEGER ," +
+                "    last_updated        TIMESTAMP," +
+                "    type                INTEGER," +
+                "    sort_name           VARCHAR ," +
+                "    begin_date_year     SMALLINT," +
+                "    begin_date_month    SMALLINT," +
+                "    begin_date_day      SMALLINT," +
+                "    end_date_year       SMALLINT," +
+                "    end_date_month      SMALLINT," +
+                "    end_date_day        SMALLINT," +
+                "    primary_for_locale  BOOLEAN ," +
+                "    ended               BOOLEAN " +
+                ")");
+
+        stmt.addBatch("CREATE TABLE place_alias_type (" +
+                "    id SERIAL," +
+                "    name TEXT NOT NULL" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE place_annotation" +
+                "(" +
+                "    place               INTEGER NOT NULL," +
+                "    annotation          INTEGER NOT NULL," +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_area_place" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_artist_place" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_label_place" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_place" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_recording" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_release" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_release_group" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_url" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL ," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE l_place_work" +
+                "(" +
+                "    id                  SERIAL," +
+                "    link                INTEGER NOT NULL," +
+                "    entity0             INTEGER NOT NULL," +
+                "    entity1             INTEGER NOT NULL," +
+                "    edits_pending       INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+        stmt.addBatch("CREATE TABLE place_tag" +
+                "(" +
+                "    place               INTEGER NOT NULL," +
+                "    tag                 INTEGER NOT NULL," +
+                "    count               INTEGER NOT NULL," +
+                "    last_updated        TIMESTAMP" +
+                ")");
+
+    }
+
+
     protected void setupReplicationTables(Statement stmt) throws Exception {
         
         stmt.addBatch("CREATE TABLE replication_control (" +

Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResourceType.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResourceType.java	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/ResourceType.java	2013-09-30 13:43:50 UTC (rev 13709)
@@ -13,6 +13,7 @@
   AREA("area", AreaIndex.class, AreaSearch.class, AreaDismaxSearch.class, MusicbrainzSimilarity.class, false),
   ARTIST("artist", ArtistIndex.class, ArtistSearch.class, ArtistDismaxSearch.class, MusicbrainzSimilarity.class, true),
   LABEL("label", LabelIndex.class, LabelSearch.class, LabelDismaxSearch.class, MusicbrainzSimilarity.class, true),
+  PLACE("place", PlaceIndex.class, PlaceSearch.class, PlaceDismaxSearch.class, MusicbrainzSimilarity.class, false),
   RELEASE("release", ReleaseIndex.class, ReleaseSearch.class, ReleaseDismaxSearch.class, true),
   RELEASE_GROUP("release-group", ReleaseGroupIndex.class, ReleaseGroupSearch.class, ReleaseGroupDismaxSearch.class, ReleaseGroupSimilarity.class, true),
   RECORDING("recording", RecordingIndex.class, RecordingSearch.class, RecordingDismaxSearch.class, RecordingSimilarity.class, true),

Modified: search_server/trunk/servlet/src/main/resources/oxml.xml
===================================================================
--- search_server/trunk/servlet/src/main/resources/oxml.xml	2013-09-26 15:27:04 UTC (rev 13708)
+++ search_server/trunk/servlet/src/main/resources/oxml.xml	2013-09-30 13:43:50 UTC (rev 13709)
@@ -5,6 +5,11 @@
     <java-types>
         <java-type name="Metadata">
             <java-attributes>
+                <xml-element java-attribute="placeList" xml-path="."/>
+            </java-attributes>
+        </java-type>
+        <java-type name="Metadata">
+            <java-attributes>
                 <xml-element java-attribute="areaList" xml-path="."/>
             </java-attributes>
         </java-type>
@@ -195,6 +200,11 @@
                 <xml-element java-attribute="area" name="areas"/>
             </java-attributes>
         </java-type>
+        <java-type name="PlaceList">
+            <java-attributes>
+                <xml-element java-attribute="place" name="places"/>
+            </java-attributes>
+        </java-type>
         <java-type name="ReleaseList">
             <java-attributes>
                 <xml-element java-attribute="release" name="releases"/>
@@ -285,6 +295,11 @@
                 <xml-element java-attribute="aliasList" xml-path="."/>
             </java-attributes>
         </java-type>
+        <java-type name="Place">
+            <java-attributes>
+                <xml-element java-attribute="aliasList" xml-path="."/>
+            </java-attributes>
+        </java-type>
         <java-type name="Artist">
             <java-attributes>
                 <xml-element java-attribute="aliasList" xml-path="."/>