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