Lucene Migration от 2 до 7 - PullRequest
       1

Lucene Migration от 2 до 7

0 голосов
/ 19 марта 2019

Я перевожу Lucene с 2.0 на 7.0.Не удалось найти альтернативу для ChainedFilter в последней версии Lucene.Не могли бы вы помочь мне с миграцией.

Я использовал BooleanQuery.Builder () для миграции с фильтра на запрос, но мой пример использования здесь немного другой.Ниже приведен мой старый код, который необходимо перенести.

        Filter filter = null;
        ArrayList filters = new ArrayList();            
    BooleanQuery filterQuery = new BooleanQuery();
        filterQuery.add(new TermQuery(new Term(TEXT_FIELD,"0")), BooleanClause.Occur.MUST);
        Filter moduleFilter = new QueryWrapperFilter(filterQuery);
        filters.add(moduleFilter);

        BooleanQuery filterQuery2 = new BooleanQuery();
        filterQuery2.add(new TermQuery(new Term(TEXT_FIELD2,"0")), BooleanClause.Occur.MUST);
        Filter moduleFilter2 = new QueryWrapperFilter(filterQuery2);
        filters.add(moduleFilter2);

        if ((filters!=null) && (filters.size()>0)){
            Filter []filterArray = new Filter[filters.size()];
            filter = new ChainedFilter((Filter[])filters.toArray(filterArray), ChainedFilter.OR);
        }

Я внес следующие изменения, чтобы перейти от фильтра к запросу.

    Query filter = null;
    ArrayList filters = new ArrayList();

    BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
    booleanQueryBuilder.add(new TermQuery(new Term(TEXT_FIELD,"0")), BooleanClause.Occur.MUST);
    Query moduleFilter = booleanQueryBuilder.build();
    filters.add(moduleFilter);

    BooleanQuery.Builder booleanQueryBuilder2 = new BooleanQuery.Builder();
    booleanQueryBuilder2.add(new TermQuery(new Term(TEXT_FIELD2,"0")), BooleanClause.Occur.MUST);
    Query moduleFilter2 = booleanQueryBuilder2.build();
    filters.add(moduleFilter2);

    if ((filters!=null) && (filters.size()>0)){
            Query []filterArray = new Query[filters.size()];
            filter = new ChainedQuery((Filter[])filters.toArray(filterArray), ChainedFilter.OR);
    }

Я считаю, что указанные выше изменения верны, ноне понимая, как изменить ChainedFilter.

1 Ответ

0 голосов
/ 19 марта 2019

Фильтры теперь заменены на Queries, так что вы просто хотите использовать BooleanQuery s.

Возможно, вы захотите заменить ChainedFilter одним BooleanQuery, а затем добавить его с BooleanClause.Occur.FILTER в другой логический запрос, содержащий остальную часть вашего запроса. Что-то вроде:

BooleanQuery filter = BooleanQuery.Builder()
    .Add(new TermQuery(new Term('field1', 'filter1')), BooleanClause.Occur.MUST)
    .Add(new TermQuery(new Term('field2', 'filter2')), BooleanClause.Occur.MUST_NOT)
    .build();

BooleanQuery query = BooleanQuery.Builder()
    .Add(filter, BooleanClause.Occur.FILTER)
    .Add(someOtherQuery, BooleanClause.Occur.MUST)
    .build();

Соответствующие примечания к этим изменениям:
Удаление ChainedFilter в Lucene 5.0: https://lucene.apache.org/core/5_0_0/MIGRATE.html
Снятие фильтра в Lucene 6.0: https://lucene.apache.org/core/6_0_0/MIGRATE.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...