Estoy usando Solrs TermsComponent para implementar una característica de autocompletar. Mis documentos contienen etiquetas que he indexado en un campo de "etiquetas". Ahora puedo usar TermsComponent para descubrir qué etiquetas se usan en todos los documentos almacenados. Esto funciona bastante bien hasta ahora.Límite de términos en términos de Solr Componente a términos que se originan de ciertos documentos
Sin embargo, existe un requisito adicional: cada documento tiene un campo propietario que contiene el ID del usuario que lo posee. La lista de autocompletar solo debe contener etiquetas de documentos, que el usuario que está solicitando el autocompletar es el propietario.
He tratado de establecer el parámetro de consulta, sin embargo, esto parece ser ignorado por el TermsComponent:
public static List<String> findUniqueTags(String beginningWith, User owner) throws IOException {
SolrParams q = new SolrQuery().setQueryType("/terms")
.setQuery("owner:" + owner.id.toString())
.set(TermsParams.TERMS, true).set(TermsParams.TERMS_FIELD, "tags")
.set(TermsParams.TERMS_LOWER, beginningWith)
.set(TermsParams.TERMS_LOWER_INCLUSIVE, false)
.set(TermsParams.TERMS_PREFIX_STR, beginningWith);
QueryResponse queryResponse;
try {
queryResponse = getSolrServer().query(q);
} catch (SolrServerException e) {
Logger.error(e, "Error when querying server.");
throw new IOException(e);
}
NamedList tags = (NamedList) ((NamedList)queryResponse.getResponse().get("terms")).get("tags");
List<String> result = new ArrayList<String>();
for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
Map.Entry tag = (Map.Entry) iterator.next();
result.add(tag.getKey().toString());
}
return result;
}
Entonces, ¿hay una manera de limitar las etiquetas devueltas por TermsComponent, o tengo manualmente para consultar todas las etiquetas del usuario y las filtro yo mismo?
Faceting parece ser el verdadero truco. Muchas gracias. –