Типы для больших количеств

Я не могу комментировать или отправлять сообщения напрямую, но можете ли вы дать дополнительные разъяснения?

Я попытался воссоздать проблему, поскольку ваш первый пример поиска должен работать так, как ожидалось. Чтобы подтвердить это, я создал простой индекс и добавил несколько записей для проверки различных предоставленных вами запросов:

POST demo/_doc
{
  "created_at": "2019-04-02T12:00:00.000Z",
  "comment": "contains comment"
}

POST demo/_doc
{
  "created_at": "2019-04-03T12:00:00.000Z",
  "comment": "contains another comment"
}

POST demo/_doc
{
  "created_at": "2019-04-03T12:00:00.000Z",
  "comment": "not what we are looking for"
}

Примечание. Я не беспокоился о пользовательском анализаторе, поскольку ваши отдельные запросы указывают отдельные поиски работают правильно, так что это не должно иметь никакого влияния.

После этого тестирование отдельных запросов дало ожидаемые результаты, а тестирование исходного запроса, который вы предоставили, также дало ожидаемые результаты:

Запрос:

GET demo/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "comment": "comment"
          }
        },
        {
          "range": {
            "created_at": {
              "gte": "2019-04-03T00:00:00.000Z"
            }
          }
        }
      ]
    }
  }
}

Результат:

{
  "took" : 17,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.287682,
    "hits" : [
      {
        "_index" : "demo",
        "_type" : "_doc",
        "_id" : "-sxo72kBwpqm-gdssSYh",
        "_score" : 1.287682,
        "_source" : {
          "created_at" : "2019-04-03T12:00:00.000Z",
          "comment" : "contains another comment"
        }
      }
    ]
  }
}

Единственная возможность, которая выпадает на меня, это то, что вы указали в своем последнем утверждении, что есть посты, созданные «после 3 марта с текстом комментария в поле комментария», которые вы создали, но запросы фактически ищут посты с текстом комментария в поле для комментариев после апреля 3-го. Однако это вполне может быть опечаткой.

В качестве альтернативы, поскольку ваш второй запрос возвращает только 19 обращений (диапазон дат с просмотром поля created_at), вы можете просмотреть их, найти поле с комментарием, содержащим текст comment, и вставить его или фрагмент этого?

7
задан Sruly 1 March 2009 в 14:06
поделиться

4 ответа

Действительно трудно для сообщения - Зависит от сторонних библиотек :)

Лучший выбор состоял бы в том, чтобы использовать Систему. Диагностика. Класс StopWatch, сделайте gazzillion различные вычисления, время их и сравните результаты, я предполагаю..

[РЕДАКТИРОВАНИЕ] - О сравнительных тестах, я сделал бы серию сравнительных тестов Ваш largeInt-тип, чтобы сделать вычисления на регулярных числах на 32/64 бита и ряд, проверяющий, может ли число поместиться в регулярные типы Int32/Int64 (который они должны), "downcasting" их к этим типам, и затем выполните те же вычисления с помощью этих типов. От Вашего вопроса это походит на то, что Вы будете делать, если встроенные типы будут быстрее..

Если Ваше приложение предназначено для большего количества людей, чем себя, попытайтесь выполнить их на различных машинах (одноядерный, многоядерный, 32 бита, платформах на 64 бита), и если платформа, кажется, оказывает большое влияние во время, вычисления берут, используют своего рода стратегическую модель, чтобы сделать вычисления по-другому на различных машинах.

Удача :)

2
ответ дан 7 December 2019 в 10:08
поделиться

Я ожидал бы, что достойная библиотека больших количеств сможет сделать эту оптимизацию на своем собственном...

2
ответ дан 7 December 2019 в 10:08
поделиться

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

Логика проста: целочисленное дополнение является одной инструкцией по сборке. Объединенный со сравнением, это - три или четыре инструкции. Любая реализация программного обеспечения такой операции по всей вероятности будет намного медленнее.

Оптимально, эта проверка должна быть сделана в самих библиотеках LargeNumber. Если они не делают этого, Вам, возможно, понадобится обертка, чтобы не иметь проверки повсеместно. Но затем необходимо думать о дополнительной стоимости обертки также.

2
ответ дан 7 December 2019 в 10:08
поделиться

Работавший в проекте, где те же поля должны были обработать очень большие количества и в то же время, обрабатывает точность для очень небольших чисел.
Законченный с хранением к полям (мантисса и экспонента) для каждого количества такого вида.
Мы сделали класс для вычислений мантиссы/экспоненты, и он работал хорошо.

0
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: