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

[email protected] Thu, 02 May 2013 16:10:44 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1UXw5k-0004pJ-4D@wiley>
Author: ijabz
Date: 2013-05-02 16:10:43 +0000 (Thu, 02 May 2013)
New Revision: 13676

Modified:
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
   search_server/trunk/index/src/main/java/org/musicbrainz/search/index/TrackWrapper.java
   search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
   search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
Log:
SEARCH-285:Added support for searching recording index by trackid (fieldname:tid)

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -205,7 +205,7 @@
 
         getDbConnection().createStatement().execute(
             "CREATE TEMPORARY TABLE tmp_track AS " +
-                "SELECT t.id, t.recording, t.length, tn.name as track_name, t.position as track_position, t.number as track_number, m.track_count, " +
+                "SELECT t.id, t.gid, t.recording, t.length, tn.name as track_name, t.position as track_position, t.number as track_number, m.track_count, " +
                 "  m.release as release_id, m.position as medium_position, mf.name as format " +
                 " FROM track t " +
                 "  INNER JOIN track_name tn ON t.name=tn.id" +

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -126,7 +126,7 @@
                             " WHERE recording between ? AND ?");
 
             addPreparedStatement("TRACKS",
-                    "SELECT id, track_name, length as duration, recording, track_position, track_number, track_count, " +
+                    "SELECT id, gid, track_name, length as duration, recording, track_position, track_number, track_count, " +
                             "  release_id, medium_position, format " +
                             " FROM tmp_track " +
                             " WHERE recording between ? AND ?");
@@ -138,7 +138,7 @@
                             " AND   recording between ? AND ?");
 
             addPreparedStatement("TRACKS",
-                    "SELECT t.id, tn.name as track_name, t.length as duration, t.recording, t.position as track_position, t.number as track_number, m.track_count, " +
+                    "SELECT t.id, t.gid, tn.name as track_name, t.length as duration, t.recording, t.position as track_position, t.number as track_number, m.track_count, " +
                             "  m.release as release_id, m.position as medium_position,mf.name as format " +
                             " FROM track t " +
                             "  INNER JOIN track_name tn ON t.name=tn.id AND t.recording BETWEEN ? AND ?" +
@@ -425,6 +425,7 @@
             }
             TrackWrapper tw = new TrackWrapper();
             tw.setTrackId(rs.getInt("id"));
+            tw.setTrackGuid(rs.getString("gid"));
             tw.setReleaseId(rs.getInt("release_id"));
             tw.setTrackCount(rs.getInt("track_count"));
             tw.setTrackPosition(rs.getInt("track_position"));
@@ -742,6 +743,8 @@
                 releaseList.getRelease().add(release);
 
                 if (release != null) {
+
+                    doc.addNonEmptyField(RecordingIndexField.TRACK_ID, trackWrapper.getTrackGuid());
                     ReleaseGroup rg = release.getReleaseGroup();
                     String primaryType = rg.getPrimaryType();
                     doc.addFieldOrUnknown(RecordingIndexField.RELEASEGROUP_ID, rg.getId());

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -45,6 +45,7 @@
     RELEASEGROUP_ID	        ("rgid",			    MusicBrainzFieldTypes.TEXT_NOT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
     TAG		                ("tag",		            MusicBrainzFieldTypes.TEXT_NOT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
     TRACKNUM			    ("tnum",		        MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED, new KeywordAnalyzer()),
+    TRACK_ID                ("tid",		            MusicBrainzFieldTypes.TEXT_STORED_NOT_ANALYZED_NO_NORMS, new KeywordAnalyzer()),
     RECORDING_STORE		     ("recordingstore",    MusicBrainzFieldTypes.TEXT_STORED_NOT_INDEXED),
 
 

Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/TrackWrapper.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/TrackWrapper.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/TrackWrapper.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -5,6 +5,7 @@
  */
 class TrackWrapper {
     private int     trackId;
+    private String  trackGuid;
     private int     trackPosition;
     private int     trackCount;
     private int     releaseId;
@@ -86,4 +87,12 @@
     public void setTrackNumber(String trackNumber) {
         this.trackNumber = trackNumber;
     }
+
+    public String getTrackGuid() {
+        return trackGuid;
+    }
+
+    public void setTrackGuid(String trackGuid) {
+        this.trackGuid = trackGuid;
+    }
 }
\ No newline at end of file

Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -81,8 +81,8 @@
 
         stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format) VALUES (1, 2, 491240, 1, 7)");
 
-        stmt.addBatch("INSERT INTO track (id, recording, medium, position, number, name, artist_credit, length) "
-                + " VALUES (1, 1, 1, 4, 'A4', 2, 1, 33100)");
+        stmt.addBatch("INSERT INTO track (id, gid, recording, medium, position, number, name, artist_credit, length) "
+                + " VALUES (1, 'c3b8dbc9-c1ff-4743-9015-8d762819134e', 1, 1, 4, 'A4', 2, 1, 33100)");
         stmt.addBatch("INSERT INTO recording (id, gid, name, artist_credit, length, comment)"
                 + " VALUES (1, '2f250ed2-6285-40f1-aa2a-14f1c05e9765', 1, 1, 33000, 'demo')");
 
@@ -137,8 +137,8 @@
                 "  language, script) " +
                 " VALUES (491240, 'c3b8dbc9-c1ff-4743-9015-8d762819134e', 2, 1, 491240, 1, 1, 1)");
         stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format) VALUES (1, 2, 491240, 1, 7)");
-        stmt.addBatch("INSERT INTO track (id, recording, medium, position, name, artist_credit, length) "
-                + " VALUES (1, 1, 1, 4, 1, 2, 33100)");
+        stmt.addBatch("INSERT INTO track (id, gid, recording, medium, position, name, artist_credit, length) "
+                + " VALUES (1, 'c3b8dbc9-c1ff-4743-9015-8d762819134e', 1, 1, 4, 1, 2, 33100)");
         stmt.addBatch("INSERT INTO recording (id, gid, name, artist_credit, length)"
                 + " VALUES (1, '2f250ed2-6285-40f1-aa2a-14f1c05e9765', 1, 1, 33000)");
         stmt.addBatch("INSERT INTO track_name (id, name) VALUES (1, 'Do It Clean')");
@@ -177,8 +177,8 @@
                 "  language, script) " +
                 " VALUES (491240, 'c3b8dbc9-c1ff-4743-9015-8d762819134e', 2, 1, 491240, 1, 1, 1, 1)");
         stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format, name) VALUES (1, 2, 491240, 1, 7, null)");
-        stmt.addBatch("INSERT INTO track (id, recording, medium, position, name, artist_credit, length) "
-                + " VALUES (1, 1, 1, 7, 2, 1, 33100)");
+        stmt.addBatch("INSERT INTO track (id, gid, recording, medium, position, name, artist_credit, length) "
+                + " VALUES (1, 'c3b8dbc9-c1ff-4743-9015-8d762819134e', 1, 1, 7, 2, 1, 33100)");
         stmt.addBatch("INSERT INTO recording (id, gid, name, artist_credit, length)"
                 + " VALUES (1, '2f250ed2-6285-40f1-aa2a-14f1c05e9765', 1, 1, 33000)");
 
@@ -192,8 +192,8 @@
 
         stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format) VALUES (2, 2, 491241, 1, 7)");
 
-        stmt.addBatch("INSERT INTO track (id, recording, medium, position, name, artist_credit, length) "
-                + " VALUES (2, 1, 2, 4, 2, 1, 33100)");
+        stmt.addBatch("INSERT INTO track (id, gid, recording, medium, position, name, artist_credit, length) "
+                + " VALUES (2, 'd3b8dbc9-c1ff-4743-9015-8d762819134e', 1, 2, 4, 2, 1, 33100)");
 
         stmt.addBatch("INSERT INTO track_name (id, name) VALUES (1, 'Do It Clean')");
         stmt.addBatch("INSERT INTO track_name (id, name) VALUES (2, 'Do It Cleans')");
@@ -620,7 +620,26 @@
         ir.close();
     }
 
+    /**
+     * Basic test of all fields
+     *
+     * @throws Exception exception
+     */
+    @Test
+    public void testTrackGuid() throws Exception {
 
+        addTrackOne();
+        RAMDirectory ramDir = new RAMDirectory();
+        createIndex(ramDir);
+
+        IndexReader ir = DirectoryReader.open(ramDir);
+        assertEquals(2, ir.numDocs());
+        {
+            checkTerm(ir, RecordingIndexField.TRACK_ID, "c3b8dbc9-c1ff-4743-9015-8d762819134e");
+        }
+        ir.close();
+    }
+
     /**
      * @throws Exception exception
      */
@@ -842,7 +861,7 @@
             assertEquals(null, release.getCountry());
             assertEquals("1950", release.getDate());
             ReleaseEventList rel = release.getReleaseEventList();
-            assertEquals(4,rel.getReleaseEvent().size());
+            assertEquals(4, rel.getReleaseEvent().size());
             assertEquals(null, release.getCountry());
             assertEquals("1950", release.getDate());
             assertEquals(null, rel.getReleaseEvent().get(0).getCountry());
@@ -873,6 +892,17 @@
             assertNotNull(medium);
             assertEquals(1, medium.getPosition().intValue());
             assertEquals("Vinyl", medium.getFormat());
+
+            Medium.TrackList trackList = medium.getTrackList();
+            assertNotNull(trackList);
+
+            assertNotNull(trackList.getDefTrack());
+
+            Medium.TrackList.Track track = trackList.getDefTrack().get(0);
+            assertEquals("Do It Cleans", track.getTitle());
+            assertNull(track.getPosition());  //We dont currently output this, but perhaps should
+            assertEquals("A4", track.getNumber());
+
         }
         ir.close();
     }

Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2013-05-02 15:26:25 UTC (rev 13675)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2013-05-02 16:10:43 UTC (rev 13676)
@@ -77,6 +77,7 @@
             recording.setReleaseList(releaseList);
             m.setFormat("Vinyl");
             track.setTitle("Gravitational Lens");
+            doc.addField(RecordingIndexField.TRACK_ID,"2d9e8ed6-3893-4d3b-aa7d-72e79609e386");
 
             release.setId("1d9e8ed6-3893-4d3b-aa7d-6cd79609e386");
             release.setTitle("Our Glorious 5 Year Plan");
@@ -463,6 +464,12 @@
         assertEquals("7ca7782b-a602-448b-b108-bb881a7be2d6", getRecordingId(res.results.get(0).getDoc()));
     }
 
+    @Test
+    public void testFindRecordingByTrackId() throws Exception {
+        Results res = ss.search("tid:2d9e8ed6-3893-4d3b-aa7d-72e79609e386", 0, 10);
+        assertEquals(1, res.getTotalHits());
+        assertEquals("7ca7782b-a602-448b-b108-bb881a7be2d6", getRecordingId(res.results.get(0).getDoc()));
+    }
 
     @Test
     public void testOutputAsMmd1Xml() throws Exception {