[mb-commits] r13636 - 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/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet
[email protected] Wed, 27 Feb 2013 11:16:01 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1UAezR-00012w-4n@wiley> |
Author: ijabz
Date: 2013-02-27 11:15:57 +0000 (Wed, 27 Feb 2013)
New Revision: 13636
Modified:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java
Log:
#SEARCH-217:Allow searching and displaying of folksnomy tags for the release entity
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndex.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -216,7 +216,7 @@
}
/**
- * Load Tags
+ * Load Artist Credits
*
* @param min
* @param max
@@ -337,8 +337,8 @@
if (tags.containsKey(id)) {
for (Tag tag : tags.get(id)) {
- doc.addField(LabelIndexField.TAG, tag.getName());
- doc.addField(LabelIndexField.TAGCOUNT, tag.getCount().toString());
+ doc.addField(ReleaseGroupIndexField.TAG, tag.getName());
+ doc.addField(ReleaseGroupIndexField.TAGCOUNT, tag.getCount().toString());
}
}
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -32,6 +32,7 @@
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
+import org.musicbrainz.mmd2.Tag;
import org.musicbrainz.search.MbDocument;
import java.io.IOException;
@@ -163,6 +164,11 @@
" FROM tmp_release rl " +
" WHERE id BETWEEN ? AND ? ");
+ addPreparedStatement("TAGS",
+ "SELECT release_tag.release, tag.name as tag, release_tag.count as count " +
+ " FROM release_tag " +
+ " INNER JOIN tag ON tag=id " +
+ " WHERE release between ? AND ?");
}
@@ -216,9 +222,33 @@
return secondaryTypes;
}
+ /**
+ * Load Tags
+ *
+ * @param min
+ * @param max
+ * @return
+ * @throws SQLException
+ * @throws IOException
+ */
+ private Map<Integer, List<Tag>> loadTags(int min, int max) throws SQLException, IOException {
+ // Get Tags
+ PreparedStatement st = getPreparedStatement("TAGS");
+ st.setInt(1, min);
+ st.setInt(2, max);
+ ResultSet rs = st.executeQuery();
+ Map<Integer,List<Tag>> tags = TagHelper.completeTagsFromDbResults(rs,"release");
+ rs.close();
+ return tags;
+
+ }
+
+
public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
+ Map<Integer, List<Tag>> tags = loadTags(min, max);
+
//A particular release can have multiple catalog nos, labels when released as an imprint, typically used
//by major labels
labelClock.resume();
@@ -327,13 +357,14 @@
rs = st.executeQuery();
releaseClock.suspend();
while (rs.next()) {
- indexWriter.addDocument(documentFromResultSet(rs, secondaryTypes, labelInfo, mediums, puidWrapper, artistCredits));
+ indexWriter.addDocument(documentFromResultSet(rs, secondaryTypes, tags, labelInfo, mediums, puidWrapper, artistCredits));
}
rs.close();
}
public Document documentFromResultSet(ResultSet rs,
Map<Integer, List<String>> secondaryTypes,
+ Map<Integer,List<Tag>> tags,
Map<Integer,List<List<String>>> labelInfo,
Map<Integer,List<List<String>>> mediums,
Map<Integer, List<String>> puids,
@@ -454,6 +485,13 @@
System.out.println("\nNo artist credit found for release:"+rs.getString("gid"));
}
+ if (tags.containsKey(id)) {
+ for (Tag tag : tags.get(id)) {
+ doc.addField(ReleaseIndexField.TAG, tag.getName());
+ doc.addField(ReleaseIndexField.TAGCOUNT, tag.getCount().toString());
+ }
+ }
+
return doc.getLuceneDocument();
}
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -40,6 +40,8 @@
SCRIPT ("script", MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new CaseInsensitiveKeywordAnalyzer()),
SECONDARY_TYPE ("secondarytype", MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
STATUS ("status", MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
+ TAG ("tag", MusicBrainzFieldTypes.TEXT_STORED_ANALYZED, new MusicbrainzWithPosGapAnalyzer()),
+ TAGCOUNT ("tagcount", MusicBrainzFieldTypes.TEXT_STORED_NOT_INDEXED),
TYPE ("type", MusicBrainzFieldTypes.TEXT_STORED_ANALYZED_NO_NORMS, new CaseInsensitiveKeywordAnalyzer()),
;
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-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -128,7 +128,9 @@
stmt.addBatch("DROP TABLE tracklist");
stmt.addBatch("DROP TABLE language");
stmt.addBatch("DROP TABLE script");
+ stmt.addBatch("DROP TABLE release_tag");
+
stmt.addBatch("DROP TABLE release_group");
stmt.addBatch("DROP TABLE release_group_primary_type");
stmt.addBatch("DROP TABLE release_group_secondary_type_join");
@@ -492,6 +494,14 @@
" name character varying(100) NOT NULL," +
" frequency integer NOT NULL DEFAULT 0" +
")");
+
+ stmt.addBatch("CREATE TABLE release_tag" +
+ "(" +
+ " release integer NOT NULL," +
+ " tag integer NOT NULL," +
+ " count integer NOT NULL," +
+ " last_updated timestamp" +
+ ")");
}
protected void setupReleaseGroupTables(Statement stmt) throws Exception {
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -168,7 +168,10 @@
stmt.addBatch("INSERT INTO script (id, iso_code, iso_number, name, frequency) VALUES (28, 'Latn' , 215, 'Latin', 4)");
stmt.addBatch("INSERT INTO release_meta (id, amazon_asin) VALUES (491240, 'B00005NTQ7')");
stmt.addBatch("INSERT INTO medium (id, tracklist, release, position, format) VALUES (1, 1, 491240, 1, 7)");
+ stmt.addBatch("INSERT INTO tag (id, name, ref_count) VALUES (1, 'punk', 2)");
+ stmt.addBatch("INSERT INTO release_tag (release, tag, count) VALUES (491240, 1, 10)");
+
stmt.executeBatch();
stmt.close();
}
@@ -873,4 +876,22 @@
}
ir.close();
}
+
+ @Test
+ public void testIndexReleaseWithTag() throws Exception {
+
+ addReleaseFour();
+ RAMDirectory ramDir = new RAMDirectory();
+ createIndex(ramDir);
+
+ IndexReader ir = DirectoryReader.open(ramDir);
+ assertEquals(2, ir.numDocs());
+ {
+ Document doc = ir.document(1);
+ assertEquals(1, doc.getFields(ReleaseIndexField.RELEASE.getName()).length);
+ assertEquals(1, doc.getFields(ReleaseIndexField.TAG.getName()).length);
+ assertEquals("punk", doc.getField(ReleaseGroupIndexField.TAG.getName()).stringValue());
+ }
+ ir.close();
+ }
}
\ No newline at end of file
Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -199,6 +199,21 @@
mediumList.setCount(BigInteger.valueOf(formats.length));
release.setMediumList(mediumList);
}
+
+ String[] tags = doc.getValues(ReleaseIndexField.TAG);
+ String[] tagCounts = doc.getValues(ReleaseIndexField.TAGCOUNT);
+ if(tags.length>0)
+ {
+ TagList tagList = of.createTagList();
+ for(int i = 0;i<tags.length;i++) {
+ Tag tag = of.createTag();
+ tag.setName(tags[i]);
+ tag.setCount(new BigInteger(tagCounts[i]));
+ tagList.getTag().add(tag);
+ }
+ release.setTagList(tagList);
+ }
+
releaseList.getRelease().add(release);
}
releaseList.setCount(BigInteger.valueOf(results.totalHits));
Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java 2013-02-27 10:29:09 UTC (rev 13635)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java 2013-02-27 11:15:57 UTC (rev 13636)
@@ -69,9 +69,11 @@
doc.addField(ReleaseIndexField.COMMENT, "demo");
doc.addField(ReleaseIndexField.SECONDARY_TYPE, "Live");
doc.addField(ReleaseIndexField.SECONDARY_TYPE, "Compilation");
+ doc.addField(ReleaseIndexField.TAG, "punk");
+ doc.addField(ReleaseIndexField.TAGCOUNT, "10");
- ArtistCredit ac = of.createArtistCredit();
+ ArtistCredit ac = of.createArtistCredit();
NameCredit nc = of.createNameCredit();
Artist artist = of.createArtist();
artist.setId("4302e264-1cf0-4d1f-aca7-2a6f89e34b36");
@@ -777,6 +779,7 @@
assertTrue(output.contains("<catalog-number>WRATHCD25</catalog-number>"));
assertTrue(output.contains("<medium-list count=\"2\">"));
assertTrue(output.contains("<secondary-type-list><secondary-type>Live</secondary-type><secondary-type>Compilation</secondary-type></secondary-type-list>"));
+ assertTrue(output.contains("<tag-list><tag count=\"10\"><name>punk</name></tag></tag-list>"));
}
@Test
@@ -853,6 +856,19 @@
String output = sw.toString();
System.out.println("Json New Pretty is" + output);
assertTrue(output.contains("\"count\" : 1"));
+ }
+
+ @Test
+ public void testFindReleaseByTag() throws Exception {
+ Results res = ss.search("tag:punk", 0, 10);
+ assertEquals(1, res.totalHits);
+ Result result = res.results.get(0);
+ MbDocument doc = result.doc;
+ assertEquals("1d9e8ed6-3893-4d3b-aa7d-6cd79609e386", doc.get(ReleaseIndexField.RELEASE_ID));
+ assertEquals("punk", doc.get(ReleaseIndexField.TAG));
+ assertEquals("10", doc.get(ReleaseIndexField.TAGCOUNT));
+
}
+
}
\ No newline at end of file