0

我一直在尝试索引 Solr 上的大量文档(约 2 亿个文档)。我使用 Pysolr 进行索引。但是,Solr 服务器在编制索引时不断下降(有时在索引了 1 亿个文档之后,有时在大约 1.8 亿个文档之后,情况有所不同)。我不确定为什么会发生这种情况,是因为打开大小限制,即与我在使用 bin/solr start 启动服务器时收到的警告有关吗?

* [警告] *您当前的打开文件限制为 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 安装的硬限制约为 21.4 亿个文档。当有数百万个文档时,使用 Solrcloud(我从未配置过)会更好吗?它会帮助解决这个问题吗?(我还有另一个包含 14 亿个文档的文件,需要在此之后进行索引)。我只有一台服务器,尝试配置 Solrcloud 有什么意义吗?

4

0 回答 0