2012-08-15 60 views
0

的Xapian docs说说查询构造函数的一个术语位置参数术语位置参数,在语句中使用搜索:如何使用Xapian的查询构造

报价:

此构造函数实际上需要几个额外的参数,其 可以用于指定在查询项 位置和频率信息:

​​3210

term_pos表示查询中该术语的位置。同样, 这对单个词条查询本身没有用处,但用于 词组搜索,段落检索和其他操作,其中 需要知道查询中词条的顺序(例如 返回在查询中发生的同一 订单中给定文档中的条款匹配)。如果此类操作不是 必需的,则可以使用默认值0。

和参考,我们有:

Xapian::Query::Query ( const std::string &  tname_, 
     Xapian::termcount wqf_ = 1, 
     Xapian::termpos  pos_ = 0  
)   

由单个项的查询。

和:

typedef unsigned termpos 

文档或查询中的一个术语位置。

所以,说我想建立的短语查询:“富酒吧巴兹”,我该如何去做? 是否term_pos_提供相对位置值,即在文档中定义的术语的顺序:
(我在这里使用Python绑定API,因为我比较熟悉它)

q = xapian.Query(xapian.Query.OP_AND, [xapian.Query("foo", wqf, 1),xapian.Query("bar", wqf,2),xapian.Query("baz", wqf,3)]) 

而且只是为了测试起见,假设我们做的:

q = xapian.Query(xapian.Query.OP_AND, [xapian.Query("foo", wqf, 3),xapian.Query("bar", wqf, 4),xapian.Query("baz", wqf, 5)]) 

因此,这将给予相同的结果与前面的例子?

而且假设我们有:

q = xapian.Query(xapian.Query.OP_AND, [xapian.Query("foo", wqf, 2),xapian.Query("bar", wqf, 4),xapian.Query("baz", wqf, 5)]) 

所以现在这将符合其中的文件有“富”,“酒吧”与一个长期分离,其次是“巴兹”?

是这样,还是这个参数指的是索引术语的绝对位置?!

编辑:

以及如何与此有关OP_PHRASE?我发现使用OP_PHRASE一些在线样本作为这样的:

q = xapian.Query(xapian.Query.OP_PHRASE, term_list) 

这使得明显的感觉,但是又是什么的角色说那句term_pos_构造搜索 - 它是一个做事的多个外科手术的方法!?

+0

我建议你在Xapian邮件列表或IRC频道上提问这些问题。这是一个深层次的问题(听起来我们的文档需要一些整理和澄清,以帮助那些想知道的人),所以SO不是讨论这类事情的好地方。 – 2012-08-16 11:03:08

+0

谢谢,我会在那里提出。 – 2012-08-16 21:20:29

回答

0
int pos = 1; 
std::list<Xapian::Query> subs; 
subs.push_back(Xapian::Query("foo", 1, pos++)); 
subs.push_back(Xapian::Query("bar", 1, pos++)); 
querylist.push_back(Xapian::Query(Xapian::Query::OP_PHRASE, subs.begin(), subs.end())); 
+0

请解释...? – dax 2013-09-30 04:16:11