SolrsTermsComponentを使用してオートコンプリート機能を実装しています。私のドキュメントには、「タグ」フィールドにインデックスを付けたタグが含まれています。これで、TermsComponentを使用して、保存されているすべてのドキュメントで使用されているタグを見つけることができます。これは今のところかなりうまく機能しています。
ただし、いくつかの追加要件があります。すべてのドキュメントには、それを所有するユーザーのIDを含む所有者フィールドがあります。オートコンプリートリストには、オートコンプリートをリクエストしているユーザーが実際に所有しているドキュメントのタグのみを含める必要があります。
クエリパラメータを設定しようとしましたが、これは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によって返されるタグを制限する方法はありますか、それともユーザーのすべてのタグを手動でクエリして自分でフィルタリングする必要がありますか?