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_は相対的な位置の値を提供しますか?つまり、ドキュメント内の用語の順序を定義しますか

 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」が1つの用語で区切られ、その後に「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 に答える