Я использую Solrs TermsComponent для реализации функции автозаполнения.Мои документы содержат теги, которые я проиндексировал в поле «теги».Теперь я могу использовать 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;
}
Так есть ли способ ограничить теги, возвращаемые TermsComponent, или мне нужно вручную запросить все теги пользователя и отфильтровать их самостоятельно?