[mb-commits] r13679 - in search_server/trunk/index/src: main/java/org/musicbrainz/search/index test/java/org/musicbrainz/search/index
[email protected] Thu, 09 May 2013 08:47:08 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1UaMVI-0005aB-BZ@wiley> |
Author: ijabz
Date: 2013-05-09 08:47:07 +0000 (Thu, 09 May 2013)
New Revision: 13679
Modified:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.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/ArtistIndexTest.java
Log:
SEARCH-219:Include alias sortnames when searching
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-05-08 16:09:27 UTC (rev 13678)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-05-09 08:47:07 UTC (rev 13679)
@@ -109,9 +109,10 @@
" WHERE artist between ? AND ?");
addPreparedStatement("ALIASES",
- "SELECT artist_alias.artist as artist, n.name as alias " +
+ "SELECT artist_alias.artist as artist, n.name as alias, sn.name as alias_sortname " +
" FROM artist_alias " +
" JOIN artist_name n ON (artist_alias.name = n.id) " +
+ " JOIN artist_name sn ON (artist_alias.sort_name = sn.id) " +
" WHERE artist BETWEEN ? AND ?");
addPreparedStatement("ARTISTCREDITS",
@@ -165,6 +166,8 @@
public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
+ ObjectFactory of = new ObjectFactory();
+
// Get Tags
PreparedStatement st = getPreparedStatement("TAGS");
st.setInt(1, min);
@@ -176,22 +179,25 @@
// IPI Codes
Map<Integer, List<String>> ipiCodes = loadIpiCodes(min, max);
- //Aliases (and Artist Credits)
- Map<Integer, Set<String>> aliases = new HashMap<Integer, Set<String>>();
+ //Aliases
+ Map<Integer, Set<Alias>> aliases = new HashMap<Integer, Set<Alias>>();
st = getPreparedStatement("ALIASES");
st.setInt(1, min);
st.setInt(2, max);
rs = st.executeQuery();
while (rs.next()) {
int artistId = rs.getInt("artist");
- Set<String> list;
+ Set<Alias> list;
if (!aliases.containsKey(artistId)) {
- list = new HashSet<String>();
+ list = new HashSet<Alias>();
aliases.put(artistId, list);
} else {
list = aliases.get(artistId);
}
- list.add(rs.getString("alias"));
+ Alias alias = of.createAlias();
+ alias.setContent(rs.getString("alias"));
+ alias.setSortName(rs.getString("alias_sortname"));
+ list.add(alias);
}
rs.close();
@@ -230,7 +236,7 @@
public Document documentFromResultSet(ResultSet rs,
Map<Integer, List<Tag>> tags,
Map<Integer, List<String>> ipiCodes,
- Map<Integer, Set<String>> aliases,
+ Map<Integer, Set<Alias>> aliases,
Map<Integer, Set<String>> artistCredits) throws SQLException {
MbDocument doc = new MbDocument();
@@ -303,12 +309,12 @@
if (aliases.containsKey(artistId)) {
AliasList aliasList = of.createAliasList();
- for (String aliasName : aliases.get(artistId)) {
- doc.addField(ArtistIndexField.ALIAS, aliasName);
-
- Alias alias = of.createAlias();
- alias.setContent(aliasName);
- aliasList.getAlias().add(alias);
+ for (Alias nextAlias : aliases.get(artistId)) {
+ doc.addField(ArtistIndexField.ALIAS, nextAlias.getContent());
+ if(!nextAlias.getSortName().equals(nextAlias.getContent())) {
+ doc.addField(ArtistIndexField.ALIAS, nextAlias.getSortName());
+ }
+ aliasList.getAlias().add(nextAlias);
}
artist.setAliasList(aliasList);
}
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-05-08 16:09:27 UTC (rev 13678)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-05-09 08:47:07 UTC (rev 13679)
@@ -341,19 +341,19 @@
" id serial NOT NULL," +
" artist integer NOT NULL," +
" name integer NOT NULL," +
- " sort_name INTEGER," +
+ " locale text," +
+ " last_updated timestamp," +
+ " edits_pending integer NOT NULL DEFAULT 0," +
" type INTEGER," +
+ " sort_name INTEGER," +
" begin_date_year SMALLINT," +
" begin_date_month SMALLINT," +
" begin_date_day SMALLINT," +
" end_date_year SMALLINT," +
" end_date_month SMALLINT," +
" end_date_day SMALLINT," +
- " locale text," +
- " last_updated timestamp," +
- " edits_pending integer NOT NULL DEFAULT 0" +
+ " primary_for_locale BOOLEAN" +
")");
-
stmt.addBatch("CREATE TABLE artist_alias_type (" +
" id SERIAL," +
" name TEXT" +
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java 2013-05-08 16:09:27 UTC (rev 13678)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java 2013-05-09 08:47:07 UTC (rev 13679)
@@ -270,7 +270,7 @@
* @throws Exception exception
*/
@Test
- public void testIndexArtistWithAlias() throws Exception {
+ public void testIndexArtistWithAliasAndAliasSortname() throws Exception {
addArtistTwo();
RAMDirectory ramDir = new RAMDirectory();
@@ -280,11 +280,18 @@
assertEquals(2, ir.numDocs());
{
checkTerm(ir, ArtistIndexField.ALIAS, "and");
+ checkTermX(ir, ArtistIndexField.ALIAS, "bunnyman",1);
+ checkTermX(ir, ArtistIndexField.ALIAS, "bunnymen",2);
+ checkTermX(ir, ArtistIndexField.ALIAS, "buunymen",3); //From alias sortname
+ checkTermX(ir, ArtistIndexField.ALIAS, "echo",4);
+ checkTermX(ir, ArtistIndexField.ALIAS, "orchestra",5);
}
ir.close();
}
+
+
/**
* Checks zeroes are removed from date
*