การจับคู่บางส่วนกับการค้นหาข้อความแบบเต็มของ postgresql โดยใช้ texticle บน Heroku

กำลังพยายามค้นหาการทำงานบน Heroku โดยใช้การค้นหาบางส่วน

แบบสอบถามต่อไปนี้สร้างข้อผิดพลาด SQL บน Heroku แต่ทำงานได้อย่างถูกต้องในเวอร์ชันภายในเครื่องของฉัน:

@events.search(params[:search]+":*")

ฉันใช้บริการฐานข้อมูลที่ใช้ร่วมกันของ Heroku นี่เป็นความแตกต่างที่เป็นไปได้ทางไวยากรณ์ระหว่างเวอร์ชัน PostgreSQL หรือไม่

ฉันควรใช้ไวยากรณ์ใดในการค้นหาการจับคู่บางส่วนกับดัชนีข้อความแบบเต็มใน PostgreSQL 8


person Toby Hede    schedule 24.02.2012    source แหล่งที่มา
comment
แน่นอนว่ามีความแตกต่างระหว่างเวอร์ชันต่างๆ คุณสงสัยความแตกต่างของเวอร์ชันแล้ว ดูเหมือนจะรอบคอบที่จะพูดถึงเวอร์ชันของคุณ Heroku ที่แชร์ควรเป็น 8.3 คุณอาจสนใจ: Heroku ให้บริการ PostgreSQL 9.1 ในรุ่นเบต้า ณ ตอนนี้.   -  person Erwin Brandstetter    schedule 24.02.2012
comment
ใช่ แต่ความแตกต่างคืออะไร? เอกสารไม่แนะนำว่ามีไวยากรณ์ที่แตกต่างกันระหว่าง 8 ถึง 9   -  person Toby Hede    schedule 24.02.2012
comment
คุณสามารถใช้ % สำหรับการจับคู่บางส่วนได้ คุณลองแล้วหรือยัง? กล่าวคือ @events.search("#{params[:search]}:%")   -  person Harish Shetty    schedule 02.03.2012
comment
ไวยากรณ์ % ใช้งานได้กับ LIKE แต่ดูเหมือนว่าจะไม่ได้รับการสนับสนุนในการค้นหาข้อความแบบเต็มของ PG   -  person Toby Hede    schedule 04.03.2012


คำตอบ (4)


นี่คือการเปลี่ยนแปลงใน PostgreSQL 9.1

บางทีคุณอาจลองใช้การแก้ไขสตริงแทนการต่อข้อมูล

@events.search("#{params[:search]}:*")

ฉันไม่แน่ใจจริงๆ ว่าอิโมติคอนจูบ :* เพิ่มอะไรให้กับฟังก์ชันการทำงานของ texticle บางทีฉันอาจต้องเรียนรู้ SQL เพิ่มเติม

person James Dunn    schedule 27.02.2012
comment
นั่นเป็นไวยากรณ์เดียวกับที่ล้มเหลวใน PostgreSQL เวอร์ชัน 8 ฉันได้ลองทั้งการต่อข้อมูลและการแก้ไขแล้ว ไวยากรณ์มีไว้เพื่อการจับคู่บางส่วน คล้ายกับ SQL LIKE 'search%' - person Toby Hede; 28.02.2012
comment
นี่คือสิ่งที่ฉันอยากทำกับสิ่งทอเช่นกัน ฉันไม่พบสิ่งใดในเอกสารข้อความเกี่ยวกับการค้นหาบางส่วน อย่างไรก็ตาม คุณสามารถดำเนินการนี้ให้สำเร็จได้ด้วย pg_search gem โดยใช้ตัวเลือก :prefix =› true นั่นอาจไม่ใช่สิ่งที่คุณต้องการได้ยิน - person James Dunn; 29.02.2012
comment
ฉันพบการคอมมิตบน GitHub ที่บอกเป็นนัยถึงสิ่งที่คุณพยายามทำ github.com/tenderlove/texticle/commit/ - person James Dunn; 29.02.2012

ปรากฎว่า PostgreSQL เวอร์ชัน 8 ไม่รองรับการค้นหาบางส่วนโดยใช้ไวยากรณ์ :*

person Toby Hede    schedule 04.03.2012

เป็น http://www.postgresql.org/docs/9.0/interactive/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES กล่าวว่าการใช้ ":" ใช้เพื่อระบุการจับคู่คำนำหน้า เช่น. หากค้นหา "Australia" ด้วย "Aus:" จะใช้ได้ผลแต่ใช้ไม่ได้กับ "ust:*"

ดังนั้น concat OR xxxx LIKE "%yyy%" จะทำงานได้ดีกว่า

person Lecky Lao    schedule 02.05.2012

คุณสามารถใช้ตัวเลือก tsearch พร้อมคำนำหน้า:

:tsearch => {:prefix => true}
person The Whiz of Oz    schedule 11.01.2017