Xapian学習ノート1紹介
Xappian紹介
--------
1.簡単に紹介する
Xapianはオープンソースの検索エンジンライブラリで、C++で作成され、GPLプロトコルを許可します.http://www.opensource.org/licenses/gpl-license.php)Perl、python、PHP、Javaなどの言語と結合して使用できます.
Luceneと同じように、Xapianは検索エンジンのツールライブラリだけで、ユーザーは自分でその適切なアプリケーションを拡張することができます.これは確率モデルに基づいて、スコア計算の基本として、もちろん、それは豊富なBooleanクエリ機能を提供します.
Xapianをあなたのウェブサイトに使用したいなら、Xapianのセットを使ってもいいです.Omegaはあなたの大部分の需要を満たすことができます.もちろん、その拡張性はいいです.
現在Xpianの安定バージョンは1.2.10で、
2.機能紹介
次はXpianの主な機能点です. × オープンソース、GPLプロトコルに基づく × Unicodeをサポートしています.インデックスデータを保存するのもUTF-8 です. × 移植可能性は、Linux、Mac Os X、Windowsシステム で実行できます. × 複数の言語の結合をサポートしています.現在はPerl、python、java、PHP、C氡などの があります. × 概念モデルをクエリスコア計算の基礎とする × 関連度のフィードバックでは、Xapianは、ユーザの照会条件に基づいて、関連するフレーズまたはドキュメント、または関連する文書の種類 を返すことができる. × フレーズと類似語クエリ、ユーザーのクエリー条件は、フレーズ内の単語の出現順序、出現回数などの条件を指定できます. × Booleanクエリをサポートしています.例えば、「A NOT B」のように、Booleanクエリ結果の順序付けは確率モデルに基づいています. × サポートワードの検索 × プレフィックスクエリをサポートします.Xap* のようです. × 類義語の検索をサポートします. × ユーザクエリ条件に基づくスペルチェックをサポートします. × ファミコン検索に対応します.http://xapian.org/docs/facets × 2 GB以上のデータファイルをサポートする × プラットフォームと独立したインデックス形式で、linuxの下でインデックスを作成して、インデックスファイルをwindowsマシンにコピーしても、 を検索できます. × 同期更新とクエリーをサポートします.新しい文書はすぐに に照会できます.
Xapianはまた、CGIクエリーアプリケーションを提供しています.Omegaは、次のような特徴があります. × インデックスフォーマットはHTML、PHP、PDF、PostScriptなどに対応しています.また、そのfiltersを通じて定義された索引形式からもできます. × Perl DBI moduleを使用して、MySql、PstgreSQL、SQLite、OracleなどのSQLに対するインデックスをサポートすることができます. × CGIはいい拡張性があります.XMLとCSVのカスタマイズ出力に対応できます. 3.一例
3.1 linuxでのインストール uuntuやdebianの下で使えます.
3.2インデックスの作成
--------
1.簡単に紹介する
Xapianはオープンソースの検索エンジンライブラリで、C++で作成され、GPLプロトコルを許可します.http://www.opensource.org/licenses/gpl-license.php)Perl、python、PHP、Javaなどの言語と結合して使用できます.
Luceneと同じように、Xapianは検索エンジンのツールライブラリだけで、ユーザーは自分でその適切なアプリケーションを拡張することができます.これは確率モデルに基づいて、スコア計算の基本として、もちろん、それは豊富なBooleanクエリ機能を提供します.
Xapianをあなたのウェブサイトに使用したいなら、Xapianのセットを使ってもいいです.Omegaはあなたの大部分の需要を満たすことができます.もちろん、その拡張性はいいです.
現在Xpianの安定バージョンは1.2.10で、
2.機能紹介
次はXpianの主な機能点です.
Xapianはまた、CGIクエリーアプリケーションを提供しています.Omegaは、次のような特徴があります.
3.1 linuxでのインストール uuntuやdebianの下で使えます.
$ sudo apt-get install python-xapian
$ sudo apt-get install libxapian-dev
をインストールしたり,ソースコードからコンパイルしたり,インストールしたりします.3.2インデックスの作成
#include <xapian.h> //
#include <iostream>
#include <string>
#include <cstdlib> // For exit().
#include <cstring>
using namespace std;
int
main(int argc, char **argv)
try {
if (argc != 2 || argv[1][0] == '-') {
int rc = 1;
if (argv[1]) {
if (strcmp(argv[1], "--version") == 0) {
cout << "simpleindex" << endl;
exit(0);
}
if (strcmp(argv[1], "--help") == 0) {
rc = 0;
}
}
cout << "Usage: " << argv[0] << " PATH_TO_DATABASE
"
"Index each paragraph of a text file as a Xapian document." << endl;
exit(rc);
}
// Open the database for update, creating a new database if necessary.
//
Xapian::WritableDatabase db(argv[1], Xapian::DB_CREATE_OR_OPEN);
//
Xapian::TermGenerator indexer;
Xapian::Stem stemmer("english");
indexer.set_stemmer(stemmer);
string para;
while (true) {
string line;
if (cin.eof()) {
if (para.empty()) break;
} else {
getline(cin, line);
}
if (line.empty()) {
if (!para.empty()) {
// We've reached the end of a paragraph, so index it.
//
Xapian::Document doc;
doc.set_data(para); // , , , URI,
// ,
indexer.set_document(doc);
indexer.index_text(para);
// Add the document to the database.
//
db.add_document(doc);
para.resize(0);
}
} else {
if (!para.empty()) para += ' ';
para += line;
}
}
// Explicitly commit so that we get to see any errors. WritableDatabase's
// destructor will commit implicitly (unless we're in a transaction) but
// will swallow any exceptions produced.
db.commit();
} catch (const Xapian::Error &e) {
cout << e.get_description() << endl;
exit(1);
}
3.3クエリ
#include <xapian.h>
#include <iostream>
#include <string>
#include <cstdlib> // For exit().
#include <cstring>
using namespace std;
int
main(int argc, char **argv)
try {
// We require at least two command line arguments.
if (argc < 3) {
int rc = 1;
if (argv[1]) {
if (strcmp(argv[1], "--version") == 0) {
cout << "simplesearch" << endl;
exit(0);
}
if (strcmp(argv[1], "--help") == 0) {
rc = 0;
}
}
cout << "Usage: " << argv[0] << " PATH_TO_DATABASE QUERY" << endl;
exit(rc);
}
// Open the database for searching.
//
Xapian::Database db(argv[1]);
// Start an enquire session.
//
Xapian::Enquire enquire(db);
// Combine the rest of the command line arguments with spaces between
// them, so that simple queries don't have to be quoted at the shell
// level.
string query_string(argv[2]);
argv += 3;
while (*argv) {
query_string += ' ';
query_string += *argv++;
}
// Parse the query string to produce a Xapian::Query object.
//
Xapian::QueryParser qp;
Xapian::Stem stemmer("english");
qp.set_stemmer(stemmer);
qp.set_database(db);
qp.set_stemming_strategy(Xapian::QueryParser::STEM_SOME);
try
//
Xapian::Query query = qp.parse_query(query_string);
cout << "Parsed query is: " << query.get_description() << endl;
// Find the top 10 results for the query.
// ,
enquire.set_query(query);
//
Xapian::MSet matches = enquire.get_mset(0, 10);
// Display the results.
cout << matches.get_matches_estimated() << " results found.
";
cout << "Matches 1-" << matches.size() << ":
" << endl;
//
for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i) {
cout << i.get_rank() + 1 << ": " << i.get_percent() << "% docid=" << *i
<< " [" << i.get_document().get_data() << "]
";
}
} catch (const Xapian::Error &e) {
cout << e.get_description() << endl;
exit(1);
}
4.参考http://xapian.org/