Kecocokan sebagian dengan pencarian teks lengkap postgresql menggunakan teks di Heroku

Mencoba membuat pencarian berfungsi di Heroku menggunakan pencarian parsial

Kueri berikut menghasilkan kesalahan SQL di Heroku, tetapi berfungsi dengan benar di versi lokal saya:

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

Saya menggunakan layanan database bersama Heroku, apakah ini kemungkinan perbedaan sintaksis antara versi PostgreSQL?

Sintaks apa yang harus saya gunakan untuk melakukan pencarian pencocokan sebagian terhadap indeks teks lengkap di PostgreSQL 8?


person Toby Hede    schedule 24.02.2012    source sumber
comment
Tentu saja ada perbedaan antar versi. Anda sudah mencurigai adanya perbedaan versi. Tampaknya bijaksana untuk menyebutkan versi Anda. Heroku yang dibagikan seharusnya 8.3. Anda mungkin tertarik: Heroku menawarkan PostgreSQL 9.1 dalam versi beta sekarang.   -  person Erwin Brandstetter    schedule 24.02.2012
comment
Ya, tapi apa perbedaannya? Dokumen tidak menyarankan ada sintaks yang berbeda antara 8 dan 9.   -  person Toby Hede    schedule 24.02.2012
comment
Anda dapat menggunakan % untuk kecocokan sebagian. Sudahkah Anda mencobanya? yaitu, @events.search("#{params[:search]}:%")   -  person Harish Shetty    schedule 02.03.2012
comment
Sintaks % berfungsi dengan LIKE, namun tampaknya tidak didukung dalam pencarian teks lengkap PG.   -  person Toby Hede    schedule 04.03.2012


Jawaban (4)


Berikut adalah perubahan di PostgreSQL 9.1.

Mungkin Anda bisa mencoba menggunakan interpolasi string daripada penggabungan.

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

Saya tidak begitu yakin apa yang ditambahkan oleh emotikon ciuman :* ke fungsi tekstil. Mungkin saya perlu belajar lebih banyak SQL.

person James Dunn    schedule 27.02.2012
comment
Itu adalah sintaks yang sama yang gagal pada PostgreSQL Versi 8. Saya telah mencoba penggabungan dan interpolasi. Sintaksnya dimaksudkan untuk kecocokan sebagian, mirip dengan 'pencarian%' SQL LIKE. - person Toby Hede; 28.02.2012
comment
Ini adalah sesuatu yang ingin saya lakukan dengan tekstil juga. Saya tidak dapat menemukan apa pun di dokumen teks tentang penelusuran parsial. Namun Anda dapat melakukannya dengan permata pg_search, menggunakan opsi :prefix =› true. Tapi mungkin bukan itu yang ingin Anda dengar. - person James Dunn; 29.02.2012
comment
Saya menemukan komit di github yang mengisyaratkan apa yang Anda coba lakukan. github.com/tenderlove/texticle/commit/ - person James Dunn; 29.02.2012

Ternyata PostgreSQL versi 8 tidak mendukung pencarian parsial menggunakan sintaks :*.

person Toby Hede    schedule 04.03.2012

Sebagai http://www.postgresql.org/docs/9.0/interactive/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES mengatakan, penggunaan ":" adalah untuk menentukan pencocokan awalan. Misalnya. Jika mencari "Australia" dengan "Aus:" akan berhasil tetapi tidak "ust:*".

Jadi concat OR xxxx LIKE "%yyy%" akan bekerja lebih baik

person Lecky Lao    schedule 02.05.2012

Anda dapat menggunakan opsi tsearch dengan awalan:

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