複数の SQLite データベース テーブルのコンテンツ全体に検索インデックスを構築し、データセットを使用してそれに対してファセット検索を実行します。
このプラグインの実際の例は https://datasette.io/-/beta で実行されており、この YAML ファイルを使用して構成されています。
この例がどのように機能するかについて詳しくは、「datasette.io の検索エンジンの構築」をご覧ください。
このツールを次のようにインストールします。
$ pip install dogsheep-beta
dogsheep-beta
コマンドライン ツールを使用してインデクサーを実行します。
$ dogsheep-beta index dogsheep.db config.yml
config.yml
ファイルには、インデックスを作成する必要があるデータベースとドキュメント タイプの詳細が含まれています。
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
users :
sql : |-
select
id as key,
name || ' @' || screen_name as title,
created_at as timestamp,
description as search_1
from users
これにより、これらの SQL クエリからのデータが入力されたsearch_index
テーブルがdogsheep.db
データベースに作成されます。
デフォルトでは、このツールが作成する検索インデックスは Porter ステミング用に構成されます。つまり、 run
のような単語を検索すると、 runs
またはrunning
含むドキュメントが一致します。
Porter ステミングを使用したくない場合は、 --tokenize none
オプションを使用します。
$ dogsheep-beta index dogsheep.db config.yml --tokenize none
ここで他の SQLite トークン化引数を渡すことができます。SQLite FTS トークナイザーのドキュメントを参照してください。
クエリで返される列は次のとおりです。
key
- (そのタイプ内で) 一意の主キーtitle
- アイテムのタイトルtimestamp
- ISO8601 タイムスタンプ、例: 2020-09-02T21:00:21
search_1
- 検索インデックスに含まれる大きなテキストの塊category
- 整数のカテゴリ ID。以下を参照is_public
- これがパブリックかどうかを指定する整数 (0 または 1、設定されていない場合はデフォルトは 0)公開レコードとは、公開ツイート、ブログ投稿、GitHub コミットなどです。
インデックス付きアイテムにはカテゴリを割り当てることができます。カテゴリはcategories
テーブル内のレコードに対応する整数で、デフォルトでは次のものが含まれます。
ID | 名前 |
---|---|
1 | 作成されました |
2 | 保存されました |
3 | 受け取った |
created
Dogsheep インスタンス所有者によって作成されたアイテム用です。
saved
、保存、いいね、またはお気に入りに登録したアイテムです。
received
受信メールやダイレクト メッセージなど、他の人から具体的に送信されたアイテムです。
datasette install dogsheep-beta
実行して (または Datasette と同じ環境でpip install dogsheep-beta
を使用して)、Dogsheep Beta Datasette プラグインをインストールします。
インストールすると、カスタム検索インターフェイスが/-/beta
で利用できるようになります。このインターフェイスを使用して検索を実行できます。
Datasette プラグインにはいくつかの構成オプションがあります。これらを設定するには、 metadata.json
構成ファイルに以下を追加します。
{
"plugins" : {
"dogsheep-beta" : {
"database" : " beta " ,
"config_file" : " dogsheep-beta.yml " ,
"template_debug" : true
}
}
}
プラグインの構成設定は次のとおりです。
database
- 検索インデックスを含むデータベース ファイル。ファイルがbeta.db
の場合は、 database
beta
に設定する必要があります。config_file
- Dogsheep ベータ設定を含む YAML ファイル。template_debug
- カスタム テンプレートでエラーが発生した場合にデバッグ出力を有効にするには、これをtrue
に設定します。以下を参照してください。 各インデックス付き項目タイプは、 config.yml
ファイルの一部としてカスタム表示 HTML を定義できます。これは、Jinja テンプレートのフラグメントを含むdisplay
キーを使用して実行できます。また、オプションで、表示するデータをフェッチするために実行する追加の SQL を含むdisplay_sql
キーを使用します。
ツイートのカスタム表示テンプレートを定義する方法は次のとおりです。
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display : |-
<p>{{ title }} - tweeted at {{ timestamp }}</p>
<blockquote>{{ search_1 }}</blockquote>
この例では、インデックス作成クエリの実行時にsearch_index
テーブルに格納された値を再利用します。
テンプレートに表示する追加の値を読み込むには、次のようなdisplay_sql
クエリを使用します。
twitter.db :
tweets :
sql : |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display_sql : |-
select
users.screen_name,
tweets.full_text,
tweets.created_at
from
tweets join users on tweets.user = users.id
where
tweets.id = :key
display : |-
<p>{{ display.screen_name }} - tweeted at {{ display.created_at }}</p>
<blockquote>{{ display.full_text }}</blockquote>
display_sql
クエリは検索結果ごとに実行され、 search_index
テーブルのキー値を:key
パラメータとして渡し、ユーザーの検索語を:q
パラメータとして渡します。
SQLite では多くの小さなクエリが効率的であるため、これは良好に実行されます。
テンプレートの 1 つをレンダリング中にエラーが発生した場合、検索結果ページは 500 エラーを返します。代わりに、上記で説明したtemplate_debug
構成設定を使用して、エラーが発生した検索結果アイテムのデバッグ情報を出力できます。
このプラグインには、最終的には興味深いコンテンツをレンダリングするための便利なショートカットが多数含まれる予定です。
最初に使用できるショートカットは、マップを表示するためのものです。カスタム コンテンツの出力を次のようにします。
< div
data-map-latitude =" {{ display.latitude }} "
data-map-longitude =" {{ display.longitude }} "
style =" display: none; float: right; width: 250px; height: 200px; background-color: #ccc; "
> </ div >
ページ上の JavaScript は、 data-map-latitude
とdata-map-longitude
を持つ要素を検索し、見つかった場合は Leaflet をロードして、それらの要素をその位置を中心とする地図に変換します。デフォルトのズーム レベルは 12 ですが、 data-map-zoom
属性を設定してこれをカスタマイズできます。
このプラグインをローカルでセットアップするには、まずコードをチェックアウトします。次に、新しい仮想環境を作成します。
cd dogsheep-beta
python3 -mvenv venv
source venv/bin/activate
または、 pipenv
使用している場合:
pipenv shell
次に、依存関係とテストをインストールします。
pip install -e '.[test]'
テストを実行するには:
pytest