สร้างดัชนีการค้นหาในเนื้อหาจากตารางฐานข้อมูล SQLite หลายตาราง และดำเนินการค้นหาแบบ faceted กับเนื้อหาโดยใช้ชุดข้อมูล
ตัวอย่างสดของปลั๊กอินนี้ทำงานอยู่ที่ 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 ซึ่งหมายความว่าการค้นหาคำเช่น 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
- รหัสหมวดหมู่จำนวนเต็ม ดูด้านล่างis_public
- จำนวนเต็ม (0 หรือ 1 ค่าเริ่มต้นเป็น 0 หากไม่ได้ตั้งค่า) ระบุว่าเป็นสาธารณะหรือไม่บันทึกสาธารณะคือสิ่งต่างๆ เช่น ทวีตสาธารณะ โพสต์บล็อก และคอมมิต GitHub
รายการที่จัดทำดัชนีสามารถกำหนดหมวดหมู่ได้ หมวดหมู่คือจำนวนเต็มที่สอดคล้องกับบันทึกในตาราง categories
ซึ่งมีค่าเริ่มต้นที่ประกอบด้วยข้อมูลต่อไปนี้:
รหัส | ชื่อ |
---|---|
1 | สร้าง |
2 | บันทึกแล้ว |
3 | ได้รับ |
created
สำหรับรายการที่สร้างขึ้นโดยเจ้าของอินสแตนซ์ Dogsheep
saved
ใช้สำหรับรายการที่พวกเขาได้บันทึกไว้ ชอบ หรือรายการโปรด
received
สำหรับรายการที่บุคคลอื่นส่งถึงพวกเขาโดยเฉพาะ เช่น อีเมลขาเข้าหรือข้อความส่วนตัว เป็นต้น
เรียกใช้ datasette install dogsheep-beta
(หรือใช้ pip install dogsheep-beta
ในสภาพแวดล้อมเดียวกันกับชุดข้อมูล) เพื่อติดตั้งปลั๊กอินชุดข้อมูล Dogssheep Beta
เมื่อติดตั้งแล้ว อินเทอร์เฟซการค้นหาที่กำหนดเองจะพร้อมใช้งานที่ /-/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