0

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

引用:

这个构造函数实际上接受了几个额外的参数,这些参数可用于指定查询中术语的位置和频率信息:

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_ 构造函数的作用是什么——它是一种更外科手术的做事方式吗!?

4

1 回答 1

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()));
于 2013-09-30T03:54:27.427 回答