将Solr的TermsComponent中的条款限制为源自某些文档的条款

Jan*_*omä 7 solr autocomplete solrj

我正在使用Solrs TermsComponent来实现自动完成功能.我的文档包含我在"标签"字段中编入索引的标签.现在,我可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

那么有没有办法限制由TermsComponent返回的标签,还是我手动查询用户的所有标签并自己过滤?

Tho*_*mas 7

根据这个那个 Solr的邮件列表后,术语组件上过滤,因为它在原始指标数据进行操作是不可能的.

显然,Solr开发人员正在开发一个支持过滤的真正自动提供组件.

根据您的要求,您可以使用faceting组件进行自动完成,而不是使用术语组件.它完全支持筛选查询,以将符合条件的标记集减少到索引中的文档子集.