Python 如何在Xapian中使用不同的ID?

Python 如何在Xapian中使用不同的ID?,python,xapian,Python,Xapian,我正在尝试用Xapian实现搜索。我的文档有自己的ID,即字符串。我已经按照图托拉尔说的做了: db.replace_document(doc.docno, doc_x) 其中doc.docno是标识文档的字符串。 但当我搜索时: for match in enquire.get_mset(0, 10): print match.document.get_docid() 恢复的docid只是一个简单的数字。 有人知道我是否需要做其他事情吗?Xapian文档id始终是数字,但它提供了一

我正在尝试用Xapian实现搜索。我的文档有自己的ID,即字符串。我已经按照图托拉尔说的做了:

db.replace_document(doc.docno, doc_x)
其中doc.docno是标识文档的字符串。 但当我搜索时:

for match in enquire.get_mset(0, 10):
    print match.document.get_docid()
恢复的docid只是一个简单的数字。
有人知道我是否需要做其他事情吗?

Xapian文档id始终是数字,但它提供了一种机制,让您可以通过术语和id来处理文档。因此,可以像您所做的那样,为
替换文档()
删除文档()
提供一个字符串,他们将找到与该术语匹配的所有现有文档,并将其从数据库中删除
replace_document()
随后将创建一个新文档,重新使用最低匹配(数字)文档id,如果没有匹配的文档,则使用新id

报告说:

一个常见的用途是允许来自另一个系统的UID轻松映射到Xapian中的术语。请注意,此方法不会自动将unique\u term添加为一个术语,因此您需要调用
文档。以这种方式使用
replace\u document()
时,请先添加unique\u term(unique\u term)

如果您正在使用
QueryParser
,或者以其他方式遵循许多Xapian系统遵循的规则,那么通常使用
Q
作为前缀。这意味着您可能需要在调用
replace\u document()
之前执行以下操作:

doc\u x.add\u术语('x'+doc.docno)

然后,在查询数据库时,需要再次获取文档id。您可以通过读取术语列表来实现这一点,但这有点繁琐,因此在
文档
数据中存储“外部”id(Xapian的外部)更为常见。(我经常将JSON存储在其中,以便为我需要的内容的增长提供一些空间;例如,在文档数据中包含呈现搜索结果所需的所有信息有时会很有用。)


这种方法在第二节“使用外部唯一id的术语”中有介绍。

希望我的回答能有所帮助;如果你有进一步的问题,让这个工作,有人通常可以帮助我们的邮件列表或IRC。