这是我打算做的事情:
doc = xapian.Document()
doc.set_data(somedata)
..
..
doc.add_term("Ajohn doe")
假设文档作者可以使用前缀“author”。
现在我希望能够运行此搜索“ searchterm和作者:john doe ”
这显然不起作用,因为“doe”被认为是作者的一部分(QueryParser正在将其翻译为“searchterm和作者:john OR doe”)。我应该这样做:
doc.add-term("Ajohn_doe")
并按“ searchterm和作者:john_doe ”搜索?是否有任何替代方法可以搜索带有空格的文本?
答案 0 :(得分:1)
最常见的方法是添加条件Ajohn
和Adoe
(可能使用Xapian的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行李箱进行了测试,虽然我不认为这里有什么新东西。)