将 Solr 的 TermsComponent 中的术语限制为源自某些文档的术语
Posted
技术标签:
【中文标题】将 Solr 的 TermsComponent 中的术语限制为源自某些文档的术语【英文标题】:Limiting terms in Solr's TermsComponent to terms originating from certain documents 【发布时间】:2011-07-12 04:15:41 【问题描述】:我正在使用 Solrs 术语组件来实现自动完成功能。我的文档包含我在“标签”字段中编制索引的标签。现在我可以使用 TermsComponent 找出所有存储的文档中使用了哪些标签。到目前为止,这工作得很好。
但是还有一些额外的要求:每个文档都有一个所有者字段,其中包含拥有它的用户的 ID。自动完成列表应该只包含来自文档的标签,请求自动完成的用户实际上拥有这些标签。
我已尝试设置查询参数,但条款组件似乎忽略了这一点:
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;
那么有没有办法限制条款组件返回的标签,还是我必须手动查询用户的所有标签并自己过滤它们?
【问题讨论】:
【参考方案1】:根据 Solr 邮件列表上的 this 和 that 帖子,无法对术语组件进行过滤,因为它对原始索引数据进行操作。
显然,Solr 开发人员正在开发支持您的过滤的real autosuggest component。
根据您的要求,您也许可以使用faceting component for autocomplete 而不是条款组件。它完全支持过滤查询,以将符合条件的标签集减少到索引中文档的子集。
【讨论】:
以上是关于将 Solr 的 TermsComponent 中的术语限制为源自某些文档的术语的主要内容,如果未能解决你的问题,请参考以下文章