/ / Ruby on Rails - Vyhľadávanie Dotaz na slová v rámci názvu - ruby, ruby-on-rail-4, search, scope, filterrific

Ruby on Rails - Hľadanie Dotaz na slová v rámci názvu - ruby, ruby-on-rail-4, vyhľadávanie, rozsah, filterrific

V mojej žiadosti robím scope/search na :title pre search / filter z mojich záznamov. Samotné vyhľadávanie funguje dobre, ibaže je potrebné, aby používateľ napísal presne to title & nemôžu vyhľadávať slovo v rámci :title.

Napríklad Ak title je: Toto vyhľadávanie je v pohode, používateľ musí spustiť vyhľadávanie a mať úplnú vetu: Toto vyhľadávanie na vyhľadávanie a nemôžu písať je v pohode a získajte záznamy, ktoré majú je v pohode v názve.

môj scope vyzerá ako:

class Post < ActiveRecord::Base

scope :search_query, lambda { |query|
return nil  if query.blank?
# condition query, parse into individual keywords
terms = query.downcase.split(/s+/)
# replace "*" with "%" for wildcard searches,
# append "%", remove duplicate "%"s
terms = terms.map { |e|
(e.gsub("*", "%") + "%").gsub(/%+/, "%")
}
# configure number of OR conditions for provision
# of interpolation arguments. Adjust this if you
# change the number of OR conditions.
num_or_conditions = 1
where(
terms.map {
or_clauses = [
"LOWER(posts.title) LIKE ?"
].join(" OR ")
"(#{ or_clauses })"
}.join(" AND "),
*terms.map { |e| [e] * num_or_conditions }.flatten
)
}

Ako môžem urobiť moje scope/query takže používateľ môže vyhľadávať slová v rámci title a získať záznamy, ktoré majú slová, ktoré hľadali?

Snažil som sa ILIKE, ale vyhľadávanie prestane fungovať Vo vývoji, Myslím, že kvôli sqlite nemôže ILIKE, ale v productionhľadanie fungovalo, ale stále nemôže vyhľadávať slová v tituloch.

Keď používam LIKE, sql dotaz bol:

SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) LIKE "rails%")) LIMIT 50 OFFSET 0) subquery_for_count

Počas používania ILIKE, dotaz bol:

SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) ILIKE "rails%")) LIMIT 50 OFFSET 0) subquery_for_count

SQLite3::SQLException: near "ILIKE": syntax error: SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) ILIKE "rails%")) LIMIT 50 OFFSET 0) subquery_for_count

ps: používam Filterrific gem

používam pg gem pre Production ENV & sqlite3 pre Development ENV

odpovede:

1 pre odpoveď č. 1

Ako je opísané v tomto článok w3schools, LIKE funguje ako:

WHERE CustomerName LIKE "a%" => Finds any values that starts with "a"
WHERE CustomerName LIKE "%a" => Finds any values that ends with "a"
WHERE CustomerName LIKE "%or%" => Finds any values that have "or" in any position
WHERE CustomerName LIKE "_r%" => Finds any values that have "r" in the second position
WHERE CustomerName LIKE "a_%_%" =>  Finds any values that starts with "a" and are at least 3 characters in length
WHERE ContactName LIKE "a%o" => Finds any values that starts with "a" and ends with "o"

Potreboval som sa zmeniť (e.gsub("*", "%") + "%").gsub(/%+/, "%"), na adresu: ("%" + e.gsub("*", "%") + "%").gsub(/%+/, "%") .

Pri vyhľadávaní (e.gsub("*", "%") + "%").gsub(/%+/, "%"), výsledok by bol (LOWER(posts.title) ILIKE "keyword%"), kde ("%" + e.gsub("*", "%") + "%").gsub(/%+/, "%"), dal by (LOWER(posts.title) ILIKE "%keyword%")