Индексация Lucene: Хранилище и режимы индексации объяснены

Я немного оптимизировал ваш код, время выполнения для меня сократилось с 2,8 до примерно 1,2 с. Прежде чем искать более быстрых интерпретаторов, я рекомендую вам выполнить профилирование (см. Line_profiler) и попытаться удалить все, что вы можете, из внутреннего цикла. Лучше избегать любых явных циклов for и полагаться на такие простые функции, как dot, einsum и т. Д.

Думаю, еще есть место для оптимизации. Я не думаю, что я изменил ваши ценности, но лучше проверить. С другими инструментами, такими как numba или cython ( cython.org ) или pypy ( pypy.org ), я думаю, ваше время выполнения значительно улучшится.

#!/usr/bin/env python3

import numpy as np
import time

np.random.seed(0)

#@profile
def run():
    dt = 0.0001
    f = np.random.randn(1, int(60 / dt))
    ns = np.size(f)
    yo = np.zeros((3))
    F = np.array([[1, 0.0001, 0], [0.001, 1, 0.0001], [0.001, 0, 1]])
    P1 = np.transpose(np.array([[0, 0.0001, 0]]))
    start_time = time.time()
    y1 = np.outer(f, P1)
    for i in range(ns-1):
        y1[i] += F@yo
        yo = y1[i]
    print("--- %s seconds ---" % (time.time() - start_time))
    y1 = y1.T
    print(yo)

run()

44
задан 柯鴻儀 5 September 2019 в 09:11
поделиться

1 ответ

Хранилище. Да

Средства, что значение поля будет сохранено в индексном

Хранилище. Никакой

Средства, что значение поля будет НЕ быть сохраненным в индексном

Хранилище. Да/Нет не влияет на индексацию или поиск с lucene. Это просто говорит lucene, если Вы хотите, чтобы это действовало как хранилище данных для значений в поле. Если Вы используете Хранилище. Да, тогда когда Вы ищете, значение того поля будет включено в Ваши Документы результата поиска.

, Если Вы храните свои данные в базе данных и только используете индекс Lucene для поиска, тогда можно сойти с рук Хранилище. Нет на всех Ваших полях. Однако, если Вы будете использовать индекс в качестве устройства хранения данных также, тогда Вы захотите Хранилище. Да.

Индекс. Маркируемый

Средства, что поле будет маркироваться, когда это индексировало (Вы получили тот один). Это полезно для длинных полей с несколькими словами.

Индекс. Средства Un_Tokenized

, что поле не будет проанализировано и будет сохранено как единственное значение. Это полезно для ключевое слово/отдельное слово и некоторые короткие поля многословные.

Индекс. Никакой

Точно, что это говорит. Поле не будет индексировано и поэтому недоступное для поиска. Однако Вы можете Индекс использования. Нет наряду с Хранилищем. Да для хранения значения, что Вы не хотите быть доступными для поиска.

Индекс. No_Norms

То же как Индекс. Un_Tokenized за исключением этого несколько байтов будет сохранен, не храня некоторые данные Нормализации. Эти данные - то, что используется для нормализации длины поля и повышения.

Для дополнительных материалов для чтения, lucene javadocs являются бесценными (текущая версия 4.4.0 API):

Для Вашего последнего вопроса, о том, почему не возврат Вашего запроса чего-либо, не зная больше о том, как Вы индексируете то поле, я сказал бы, что это - потому что Ваш спецификатор имени поля только присоединен к 'моей' строке. Чтобы сделать поиск фразы "моя строка", Вы хотите:

имя поля: "моя строка"

А ищет обоих слова "мой" и "строка" в поле имени поля:

имя поля: (моя строка)

84
ответ дан Alberto 26 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

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