VIVO-568 Exclude individuals whose most specific type is a Vitro term
It looks like this was the intent of ExcludeNonFlagVitro, but it was getting the VClasses of the individual, which filtered out things like PropertyGroup, ClassGroup, etc. Changed it to test the most specific types instead, which seems to be right.
This commit is contained in:
parent
9efd0d45aa
commit
04f9d98399
2 changed files with 45 additions and 29 deletions
|
@ -1,44 +1,57 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
package edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding.IndividualToSolrDocument.DONT_EXCLUDE;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.solr.common.SolrInputDocument;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
|
||||
/**
|
||||
* Exclude individuals with types from the Vitro namespace from the
|
||||
* search index. (Other than old vitro Flag types).
|
||||
* Exclude individuals with most specific types from the Vitro namespace from
|
||||
* the search index. (Other than old vitro Flag types).
|
||||
*/
|
||||
public class ExcludeNonFlagVitro implements SearchIndexExcluder {
|
||||
private static final Log log = LogFactory.getLog(ExcludeNonFlagVitro.class);
|
||||
|
||||
@Override
|
||||
public String checkForExclusion(Individual ind) {
|
||||
if( ind != null && ind.getVClasses() != null ) {
|
||||
String excludeMsg = skipIfVitro(ind, ind.getVClasses() );
|
||||
if( excludeMsg != null)
|
||||
return excludeMsg;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public String checkForExclusion(Individual ind) {
|
||||
if (ind == null) {
|
||||
return DONT_EXCLUDE;
|
||||
}
|
||||
|
||||
String skipIfVitro(Individual ind, List<VClass> vclasses) {
|
||||
for( VClass type: vclasses ){
|
||||
if( type != null && type.getURI() != null ){
|
||||
String typeURI = type.getURI();
|
||||
List<String> mostSpecificTypeUris = ind.getMostSpecificTypeURIs();
|
||||
if (mostSpecificTypeUris == null) {
|
||||
return DONT_EXCLUDE;
|
||||
}
|
||||
|
||||
if(typeURI.startsWith( VitroVocabulary.vitroURI )
|
||||
&& ! typeURI.startsWith(VitroVocabulary.vitroURI + "Flag") ){
|
||||
String message = skipIfVitro(ind, mostSpecificTypeUris);
|
||||
if (!StringUtils.equals(DONT_EXCLUDE, message)) {
|
||||
log.debug("msg=" + message + ", individual=" + ind.getURI() + " ("
|
||||
+ ind.getLabel() + "), types=" + mostSpecificTypeUris);
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
return "Skipped " + ind.getURI()+" because in "
|
||||
+ VitroVocabulary.vitroURI + " namespace";
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
String skipIfVitro(Individual ind, List<String> mostSpecificTypeUris) {
|
||||
for (String typeUri : mostSpecificTypeUris) {
|
||||
if (typeUri == null) {
|
||||
continue;
|
||||
}
|
||||
if (typeUri.startsWith(VitroVocabulary.vitroURI + "Flag")) {
|
||||
continue;
|
||||
}
|
||||
if (typeUri.startsWith(VitroVocabulary.vitroURI)) {
|
||||
return "Skipped " + ind.getURI() + " because in "
|
||||
+ VitroVocabulary.vitroURI + " namespace";
|
||||
}
|
||||
}
|
||||
return DONT_EXCLUDE;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -110,6 +110,9 @@ public class IndividualToSolrDocument {
|
|||
for( SearchIndexExcluder excluder : excludes){
|
||||
try{
|
||||
String msg = excluder.checkForExclusion(ind);
|
||||
log.debug("individual=" + ind.getURI() + " (" + ind.getLabel()
|
||||
+ "), excluder=" + excluder + ", types="
|
||||
+ ind.getMostSpecificTypeURIs() + ", msg=" + msg);
|
||||
if( msg != DONT_EXCLUDE)
|
||||
return msg;
|
||||
}catch (Exception e) {
|
||||
|
|
Loading…
Add table
Reference in a new issue