Xapian 文档谈到了一个查询构造函数,该构造函数带有一个术语位置参数,用于短语搜索:
引用:
这个构造函数实际上需要一些额外的参数,这些参数可以用于为查询中的术语指定位置和频率信息: 查询(const& 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)由单个术语组成的查询。
和:
类型胡枝子 在文档或查询中的术语位置。
那么,假设我想为短语构建一个查询:"foo 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_构造函数在短语搜索中的作用是什么--这是一种更外科的方法吗?
发布于 2013-09-30 03:54:27
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()));https://stackoverflow.com/questions/11966602
复制相似问题