0

这是我打算做的:

doc = xapian.Document()
doc.set_data(somedata)
..
..
doc.add_term("Ajohn doe")

假设前缀“作者”可用于文档作者。

现在我希望能够运行这个搜索“ searchterm AND author:john doe

这显然不起作用,因为“doe”被认为是作者的一部分(QueryParser 将其翻译为“searchterm AND author:john OR doe”)。我应该这样做:

doc.add-term("Ajohn_doe")

并按“ searchterm AND author:john_doe ”搜索?一般来说,有没有其他方法可以搜索带有空格的文本?

4

1 回答 1

1

最常见的方法是添加术语AjohnAdoe(可能使用 Xapian's TermGenerator,它将为您进行分词和术语创建)。完成此操作后,您可以运行搜索author:"john doe"(前缀短语搜索,它将能够搜索多个术语)。类似于以下内容:

import xapian
db = xapian.WritableDatabase("my-db", xapian.DB_CREATE_OR_OPEN)
tg = xapian.TermGenerator()

doc = xapian.Document()
tg.set_document(doc)
tg.index_text("John Doe", 1, "A")
db.add_document(doc)

qp = xapian.QueryParser()
qp.add_prefix("author", "A")
q = qp.parse_query('author:"John Doe"')

enq = xapian.Enquire(db)
enq.set_query(q)
for match in enq.get_mset(0, 10):
    print "%8.8i: %f" % (match.docid, match.weight,)

(针对半新的 Xapian 主干进行了测试,尽管我不相信这里有什么特别新的东西。)

于 2012-09-04T13:57:22.460 回答