如何在Xapian查询构造函数中使用术语位置参数

时间:2012-08-15 09:03:37

标签: xapian

Xapian docs谈论一个带有术语位置参数的查询构造函数,用于短语搜索:

引用:

  

这个构造函数实际上需要一些额外的参数,其中   可用于指定术语的位置和频率信息   在查询中:

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

term_pos表示查询中术语的位置。再次,   这对单个术语查询本身没有用,但用于   短语搜索,段落检索和其他操作   需要了解查询中的术语顺序(例如   返回给定文档中的匹配术语集   在查询中出现的顺序)。如果没有这样的操作   必需时,可以使用默认值0。

在参考文献中,我们有:

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

由单个词组成的查询。

typedef unsigned  termpos
     

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

所以,说我想为这句话建立一个查询:“foo bar baz”,我该怎么办呢?! 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)] )

所以现在这将匹配文件中“foo”“bar”与一个术语分隔,然后是“baz”??

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

修改

OP_PHRASE与此有何关系?我发现一些使用OP_PHRASE的在线样本:

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

这显然是有道理的,但是这个term_pos_构造函数在短语搜索中的作用是什么 - 它是一种更可行的做事方式!?

1 个答案:

答案 0 :(得分: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()));