Ограничение сроков в Условиях Solr Компонентами условий, происходящих из определенных документов - PullRequest
7 голосов
/ 09 марта 2011

Я использую 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, или мне нужно вручную запросить все теги пользователя и отфильтровать их самостоятельно?

1 Ответ

7 голосов
/ 09 марта 2011

Согласно этой и этой публикации в списке рассылки Solr, фильтрация по компоненту условий невозможна, поскольку она работает с необработанными индексными данными.

По-видимомуразработчики Solr работают над настоящим автозаполняемым компонентом , который поддерживает вашу фильтрацию.

В зависимости от ваших требований вы можете использовать вместо этого фасетный компонент для автозаполнения компонента условий.Он полностью поддерживает фильтры запросов для сокращения набора допустимых тегов до подмножества документов в индексе.

...