com.xiaomi.linden.lucene.merge.SortingMergePolicyFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.xiaomi.linden.lucene.merge.SortingMergePolicyFactory.java

Source

// Copyright 2016 Xiaomi, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.xiaomi.linden.lucene.merge;

import java.io.IOException;
import java.util.Map;

import org.apache.lucene.index.MergePolicy;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;

import com.xiaomi.linden.plugin.LindenPluginFactory;

public class SortingMergePolicyFactory implements LindenPluginFactory<MergePolicy> {

    private final static String SORT_FIELD = "sort.field";
    private final static String SORT_FIELD_TYPE = "sort.field.type";
    private final static String SORT_DESC = "sort.desc";

    @Override
    public MergePolicy getInstance(Map<String, String> params) throws IOException {
        String field = params.get(SORT_FIELD);
        SortField.Type sortFieldType = SortField.Type.DOC;
        if (params.containsKey(SORT_FIELD_TYPE)) {
            sortFieldType = SortField.Type.valueOf(params.get(SORT_FIELD_TYPE).toUpperCase());
        }

        if (sortFieldType == SortField.Type.DOC) {
            throw new IOException(
                    "Relying on internal lucene DocIDs is not guaranteed to work, this is only an implementation detail.");
        }

        boolean desc = true;
        if (params.containsKey(SORT_DESC)) {
            try {
                desc = Boolean.valueOf(params.get(SORT_DESC));
            } catch (Exception e) {
                desc = true;
            }
        }
        SortField sortField = new SortField(field, sortFieldType, desc);
        Sort sort = new Sort(sortField);
        return new SortingMergePolicyDecorator(new TieredMergePolicy(), sort);
    }

}