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_构造函数在短语搜索中的作用是什么 - 它是一种更可行的做事方式!?
答案 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()));