我的 python dict 包装器使用 whoosh 将键值对的文本索引保存在磁盘上,而不是将它们保存在内存中,似乎无法检索以这种方式添加的值:
myDictObject[myStringList[0]] = myStringList[1]
执行此操作后,以下失败(我收到一个异常,说结果为零):
myDictObject[myStringList[0]]
只需添加字符串并检索它们即可:
myDictObject[myString] = myString2
myDictObject[myString] #will return myString2
这是__getitem__(self,key)
和__setitem__(self,key,value)
代码:
def __getitem__(self,key):
self.writerToggleClose()
with self.ix.searcher() as searcher:
self.result = searcher.search( Term('keystring',unicode(key)), limit = 1 )
if self.bool_only:
if len(self.result) == 0:
return False
else:
return True
else:
return str( self.result[0]['valuestring'] ) #return, for the top result, the value for the given key
def __setitem__(self,key,value):
self.writerToggleOpen()
self.writer.add_document(keystring = unicode(key), valuestring = unicode(value))
包装模块可以在这里找到:https ://github.com/hashimmm/whoosh-dict
有趣的是,如果我打开我创建的索引(使用这个包装对象)并使用该.keys(self)
方法列出键或__iter__(self)
列出值,我插入的值就会正确列出。它们似乎无法搜索。
知道我做错了什么吗?很多事情,也许,但我不知道。
更新:
我已经编写了 lettuce 测试用例并将它们添加到 git 存储库中。如果你同时有 lettuce 和 whoosh for python,请随意简单地克隆和运行。如果你能解释为什么会出现这个问题,请告诉。