Index Lucene: Как получить условия PointValues ​​для поля LongPoint - PullRequest
0 голосов
/ 11 июня 2018

Я ищу решение, как получить термины для проиндексированных PointValues ​​по имени поля.Для String это очень просто (мой пример кода):

    IndexReader reader = caseIndexer.getIndexReader();

    Fields fields = MultiFields.getFields(reader);
    Iterator<String> names = fields.iterator();
    Map<String, Terms> map = new HashMap<>();
    while (names.hasNext()) {
        String name = names.next();
        // logger.info("->>fieldName: {}", name);
        Terms terms = fields.terms(name);
        map.put(name, terms);
        TermsEnum termsEnum = terms.iterator();
        BytesRef text;
        while ((text = termsEnum.next()) != null) {
            System.out.println("field=" + name + "; text=" + text.utf8ToString());
        }
    }

Я знаю, как получить простую статистику, такую ​​как максимальное и минимальное значение (пример кода):

    List<FieldInfo> allFields = new ArrayList<>();
    for (LeafReaderContext ctx : reader.leaves()) {
        LeafReader lr = ctx.reader();
        Iterator<FieldInfo> infos = lr.getFieldInfos().iterator();
        PointValues values = lr.getPointValues();
        while (infos.hasNext()) {
            FieldInfo info = infos.next();
            allFields.add(info);

            if (DocValuesType.SORTED_NUMERIC.equals(info.getDocValuesType())) {

                final int numDimensions = values.getNumDimensions(info.name);
                final int numBytesPerDimension = values.getBytesPerDimension(info.name);
                byte[] leafMinValue = values.getMinPackedValue(info.name);
                long size = values.size(info.name);
                byte[] leafMaxValue = values.getMaxPackedValue(info.name);
                long minValueLong = NumericUtils.sortableBytesToLong(leafMinValue, 0);
                long maxValueLong = NumericUtils.sortableBytesToLong(leafMaxValue, 0);
                double minValueDouble = NumericUtils.sortableLongToDouble(minValueLong);
                System.out.println("field=" + info.name + "; minValueLong=" + minValueLong + "; maxValueLong="
                        + maxValueLong + "; minValueDouble=" + minValueDouble + "; numDimensions=" + numDimensions
                        + "; numBytesPerDimension=" + numBytesPerDimension + "; size=" + size);

            }
        }

    }

, но какполучить условия для очков?

1 Ответ

0 голосов
/ 12 июля 2018

Если вам нужно получить исходное значение поля LongPoint, вам нужно сохранить значение в отдельном StoredField, как описано в Поле LongPoint JavaDoc .

В общем: точка (диапазон/ точные варианты использования) и поля DocValues ​​(варианты использования сортировки) используются для конкретного внутреннего использования люцены, а значения не могут использоваться для возвращаемых значений поиска.

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