この方法で使用しようとしたことはありませんが、jIO ( Github )を参照してください。
jIO を使用して、複数のストレージ (ブラウザー localstorage、webDav、xWiki、S3...) にわたって JSON ドキュメントを管理および同期できます。ストレージにはインデックスを付けることができ、jIO には、complexQueries と呼ばれる独自のクエリ モジュールが付属しており、スタンドアロンでも使用できます。
Ajax 経由でページをリクエストし、ページの全文/HTML を抽出する場合は、それをドキュメントとして jIO にダンプするだけです。
3 つの方法 (すべてjIO ドキュメントの例):
1) 単純な localstorage と複雑なクエリを使用する
検索可能にしたいすべてのドキュメントについて、jIO でドキュメントを作成します。したがって、jIO をセットアップした後:
var mySearchFiles = JIO.newJio({
"type" : "local",
"username" : "whatever",
"application_name" : "fulltextsearch"
});
次のように、完全な HTML/抽出テキスト (localstorage サイズ制限...) をドキュメントとして追加します。
mySearchFiles.put({
"_id": "your_id",
"search_result_string": "page_title/page_filename",
"searchable_text": "your_text_to_be_searched_goes_here",
function (err, response) {
// console.log(response) =
// {
// "ok": true,
// "id": "your_id",
// }
}
);
_id
検索時に jIO から返されるものとして、または別のカスタム キーを使用します。
次に、allDocs メソッドを使用して jIO で複雑なクエリを実行します (複雑なクエリを試すページの例を次に示します)。
// here you construct your basic query
var query_object = {
"query":{
"filter": {
// records from/to to be returned
"limit":[0,10],
// sort direction
"sort_on":[[search_result_string, "ascending"]],
// what fields to return
"select_list":[["search_result_string"]]
},
// wildchard
"wildcard_character":'%'
}
};
// build your query - if user entered the variable "search_term":
var search = "searchable_text: = %" + search_term + "%";
// add to query object
query_object.query.query = search;
// run the search
mySearchFiles.allDocs(
query_object,
function (err, response){
console.log(response);
}
);
これにより、必要な が返されsearch_result_string
ます。大きなテキストを検索する速度はわかりませんが、必要に応じてJSCC Parser Generatorを使用して独自の検索文法を作成できます。
2. 複雑なクエリのみを使用する ComplexQueries スタンドアロンで使用される、、およびメソッドを使用
できます。それがどのように機能するかについては、上記の例のページのリンクを確認してください。parse
serialize
query
基本的に、検索したいデータをオブジェクトリストとして利用できるようにする必要があり、クエリをシリアル化する必要があります。次に、次のように呼び出します。
var result = jIO.ComplexQueries.query(query, object_list);
もちろん、検索可能なデータを保持する場所が必要になるため、おそらく localStorage を併用します。
3. localStorage の上に indexStorage を追加する 次の
ように、localStorage の上にインデックスを追加できます。
mySearchFiles = JIO.newJio({
"type": "indexed",
"indices": [
{"name":"index_name", "fields":["field_to_be_indexed_1"]},
{"name":"index_name2", "fields":["field_to_be_indexed_1","field_to_be_indexed_2"]}
],
"field_types": {
"field_to_be_indexed_1": "string",
"field_to_be_indexed_2": "string"
},
"sub_storage": {
"type": "local",
"username": "whatever",
"application_name": "fulltextsearch"
}
});
これにより、ローカルストレージに追加するすべてのドキュメントのインデックスが作成されます。これにより、たとえば、complexQueries を使用してすべてのファイルを掘り下げる前に、ファイルに対してキーワード検索を実行できます。そう:
mySearchFiles.put({
"_id": "your_id",
"search_result_string": "page_title/page_filename",
"index_field": "keyword",
"index_field2": "another_keyword",
"searchable_text": "your_text_to_be_searched_goes_here",
function (err, response) {
// console.log(response) =
// {
// "ok": true,
// "id": "your_id",
// }
}
);
同じメソッドを呼び出すことができますが、JIO は常に最初にインデックスをクエリして結果を作成しようとします。実際には、これはリモートストレージの場所向けです (たとえば、S3 からの HTTP 要求ファイルの前にインデックスを検索します) が、それでも、使用できる可能性があります。
ご不明な点がございましたら、お知らせください。