2012-08-31 60 views
0

概率場搜尋這就是我打算做的:在Xapian的和Python

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

假設前綴「作者」是供文檔的作者。

現在我希望能夠運行該搜索「搜索關鍵詞和作者:李四

這顯然不工作,因爲「雌鹿」被認爲是作者的部分(QueryParser的是它翻譯到「searchterm AND author:john OR doe」)。我應該這樣做:

doc.add-term("Ajohn_doe") 

,並通過 「搜索關鍵詞和作者:john_doe即」 搜索?是否有任何替代方案來搜索帶空格的文本?

回答

1

這樣做的最常見方法是添加條款AjohnAdoe(可能使用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樹幹,雖然我不相信什麼特別新來的)