7

Używam klejnotu Ruby on Rails i pg_search do wyszukiwania pełnotekstowego przy użyciu bazy danych PostgreSQL w moim projekcie. Obecnie mam listę szpitali z nazwy jak:jak wyszukiwać i sortować dane, ale wykluczać słowa prefiksów w sql

Hospital A 
Hospital C 
Hospital D 
Hospital B A 

Kiedy zrobić wyszukiwania, chciałbym słowo Hospital nie wpływa na zwróconych wyników, a wyniki mogą być sortowane bez Hospital prefiksu.

Przykład jeśli wejdę Hospital w polu zapytania, nie będzie mieć żadnego zwrócone wyniki, ale jeśli wejdę A, Hospital A i Hospital B A będą wyniki, to wyniki mogą być sortowane według kolejności alfabetycznej bez Hospital prefiksem słowa, aby stać się lista:

Hospital A 
Hospital B A 

zrobiłem wyszukiwania na ten temat i okazało this answer: Advanced MySQL Alphabetical Sort with Prefix?, ale odpowiedź przy użyciu widoku, który nie wiem jak to zrobić w Rails.

Nie jestem pewien, czy gem gem pg_search obsługuje PODŁOŻENIE, ponieważ nie znalazłem żadnego dokumentu na ten temat na jego github. Czy ktoś wie, czy Postgres ma funkcje do wykonywania tego rodzaju pracy, czy nie?

Dzięki za pomoc.

Aktualizacja: skończyło się używać kolumny do przechowywania tego prefiksu słowo tak, że mogę przeszukać zawartość i uwzględniają tego słowa z zapytania i powrót oczekiwanych rezultatów. Dla każdego, kto boryka się z tym problemem, rozważ i wypróbuj moje rozwiązanie, jeśli może Cię ono uratować.

+0

Jeśli używasz wyszukiwanie pełnotekstowe PostgreSQL, dodać "szpital" jako słowo stop. –

Odpowiedz

1

Możesz odciąć prefiks. Pokazano tutaj z prefiksem "Szpital". Ponieważ wydaje się, że nie chcesz spacji po prefiksie, dodałem 1, aby go pominąć. Oczywiście możesz również wpisać numer, jeśli zawsze jest taki sam. Aby podzielić wszystko, aż do pierwszej spacji, możesz użyć wyrażenia regularnego. Sztuką jest stworzenie tymczasowego stołu, w którym dodasz wszystko, czego potrzebujesz, a następnie wygodnie z niego wybierzesz. Jeśli przedrostek się zmienia, możesz ograniczyć wewnętrzne wybieranie do WHERE name LIKE "Hospital%".

SELECT 
    name 
FROM (
    SELECT 
     SUBSTR(name, LENGTH('Hospital') + 1) AS name 
    FROM 
     hospital 
    ) AS T 
WHERE 
    name LIKE '%A%' 
ORDER BY 
    name 
; 

SQL fiddle