def create(): analyser = ChineseAnalyzer() | IntraWordFilter() | StemFilter() schema = Schema( title=TEXT(stored=True), content=TEXT(stored=True, analyzer=analyser), classier=TEXT(stored=True) ) ix = create_in('D:/代码写代码/分类后/', schema=schema, indexname='index_text') writer = ix.writer() filelist = os.listdir('D:/代码写代码/分类后/') i = 0 for file in filelist: if i <= len(filelist): content = open('D:/代码写代码/分类后/索引/' + file, encoding='utf-8').readlines() # content是一个列表,必须转成字符串,才能正常使用 # writer.add_document(title=file, content=content) writer.add_document(title=file, content=''.join( content), classier=test_classier[i]) print(file, '索引完成') print(i) i += 1 writer.commit()本段代码运行后出现lock error
时间: 2023-06-19 07:08:18 浏览: 75
这个错误通常出现在多个进程或线程同时尝试访问同一索引文件时。可以尝试使用 `with` 语句打开索引文件,以确保每次只有一个进程或线程可以访问该文件。具体代码修改如下:
```python
from whoosh.index import create_in
from whoosh.fields import *
from whoosh.analysis import ChineseAnalyzer, IntraWordFilter, StemFilter
import os
def create():
analyser = ChineseAnalyzer() | IntraWordFilter() | StemFilter()
schema = Schema(
title=TEXT(stored=True),
content=TEXT(stored=True, analyzer=analyser),
classier=TEXT(stored=True)
)
# 使用with语句打开索引文件
with create_in('D:/代码写代码/分类后/', schema=schema, indexname='index_text').writer() as writer:
filelist = os.listdir('D:/代码写代码/分类后/')
i = 0
for file in filelist:
if i <= len(filelist):
content = open('D:/代码写代码/分类后/索引/' + file, encoding='utf-8').readlines()
writer.add_document(title=file, content=''.join(content), classier=test_classier[i])
print(file, '索引完成')
print(i)
i += 1
```
使用 `with` 语句可以确保在完成操作后自动关闭索引文件,避免了多进程或线程同时访问的问题。
阅读全文