أنشئ فهرس بحث عبر المحتوى من جداول قاعدة بيانات SQLite المتعددة وقم بإجراء عمليات بحث متعددة الأوجه مقابله باستخدام Datasette
يتم تشغيل مثال مباشر لهذا المكون الإضافي على 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
سيؤدي هذا إلى إنشاء جدول search_index
في قاعدة بيانات dogsheep.db
المملوءة ببيانات من استعلامات SQL تلك.
افتراضيًا، سيتم تكوين فهرس البحث الذي تنشئه هذه الأداة لـ Porter Steering. وهذا يعني أن عمليات البحث عن كلمات مثل run
ستطابق المستندات التي تحتوي على runs
أو running
.
إذا كنت لا تريد استخدام Porter Steming، فاستخدم خيار --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
- معرف فئة عدد صحيح، انظر أدناهis_public
- عدد صحيح (0 أو 1، الافتراضي هو 0 إذا لم يتم تعيينه) لتحديد ما إذا كان هذا عامًا أم لاالسجلات العامة هي أشياء مثل تغريداتك العامة ومنشورات المدونة والتزامات GitHub.
يمكن تعيين فئة للعناصر المفهرسة. الفئات هي أعداد صحيحة تتوافق مع السجلات الموجودة في جدول categories
، والتي تحتوي افتراضيًا على ما يلي:
بطاقة تعريف | اسم |
---|---|
1 | مخلوق |
2 | أنقذ |
3 | تلقى |
created
للعناصر التي تم إنشاؤها بواسطة مالك مثيل Dogsheep.
saved
للعناصر التي قاموا بحفظها أو الإعجاب بها أو تفضيلها.
received
مخصصة للعناصر التي تم إرسالها إليهم خصيصًا من قبل أشخاص آخرين - رسائل البريد الإلكتروني الواردة أو الرسائل المباشرة على سبيل المثال.
قم بتشغيل datasette install dogsheep-beta
(أو استخدم pip install dogsheep-beta
في نفس البيئة مثل Datasette) لتثبيت البرنامج الإضافي 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
- ملف YAML الذي يحتوي على تكوين Dogsheep Beta الخاص بك.template_debug
- اضبط هذا على true
لتمكين إخراج التصحيح في حالة حدوث أخطاء في القوالب المخصصة، انظر أدناه. يمكن لكل نوع عنصر مفهرس تعريف عرض HTML المخصص كجزء من ملف config.yml
. يمكنه القيام بذلك باستخدام مفتاح display
يحتوي على جزء من قالب Jinja، واختياريًا مفتاح display_sql
مع 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.
إذا حدث خطأ أثناء عرض أحد القوالب الخاصة بك، فستعرض صفحة نتائج البحث خطأ 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