Я пытался проиндексировать множество документов по Solr (~ 200 миллионов документов). Я использую Pysolr для индексирования. Однако сервер Solr продолжает работать при индексации (иногда после индексации 100 миллионов документов, иногда после ~ 180 миллионов документов он отличается).
Я не уверен, почему это происходит, это из-за ограничения размера, связанного с предупреждением, которое я получаю при запуске сервера с запуском bin / solr?
* [ПРЕДУПРЕЖДЕНИЕ] * В настоящее время ограничение на количество открытых файлов составляет 1024. Во избежание сбоев в работе следует установить значение 65000.
Я использовал многопроцессорность при индексации с кусками 25000 (но я также пробовал с большими кусками и без многопроцессорности, и он все еще падал). Это потому, что в Solr отправлено слишком много запросов? Мой код Python ниже.
solr = pysolr.Solr('http://localhost:8983/solr/collection_name', always_commit=True)
def insert_into_solr(filepath):
""" Inserts records into an empty solr index which has already been created."""
record_number = 0
list_for_solr = []
with open(filepath, "r") as file:
csv_reader = csv.reader((line.replace('\0', '') for line in file), delimiter='\t', quoting=csv.QUOTE_NONE)
for paper_id, paper_reference_id, context in csv_reader:
# int, int, string
record_number += 1
solr_record = {}
solr_record['paper_id'] = paper_id
solr_record['reference_id'] = reference_id
solr_record['context'] = context
# Chunks of 25000
if record_number % 25000 == 0:
list_for_solr.append(solr_record)
try:
solr.add(list_for_solr)
except Exception as e:
print(e, record_number, filepath)
list_for_solr = []
print(record_number)
else:
list_for_solr.append(solr_record)
try:
solr.add(list_for_solr)
except Exception as e:
print(e, record_number, filepath)
def create_concurrent_futures():
""" Uses all the cores to do the parsing and inserting"""
folderpath = '.../'
refs_files = glob(os.path.join(folderpath, '*.txt'))
with concurrent.futures.ProcessPoolExecutor() as executor:
executor.map(insert_into_solr, refs_files, chunksize=1)
if __name__ == '__main__':
create_concurrent_futures()
Я где-то читал, что стандартная установка Solr имеет жесткий лимит около 2,14 миллиарда документов. Что лучше использовать Solrcloud (который я никогда не настраивал), когда есть сотни миллионов документов? Поможет ли это с этой проблемой? (У меня также есть другой файл с 1,4 млрд. Документов, который необходимо проиндексировать после этого). У меня только один сервер, есть ли смысл пытаться настроить Solrcloud?