0

我的 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,请随意简单地克隆和运行。如果你能解释为什么会出现这个问题,请告诉。

4

0 回答 0