konto usunięte

Temat: teoretycznie trivia.. search the base

heja,

moze ktos ma dobrego pomysla na przeszukanie forum dyskusyjnego.

na razie jedyne co zrobilem, to przeszukiwanie:
1. im wiecej wyrazow tym wyniki dokladniejsze (like %slowo_1% and like %slowo_2% and like %slowo_n%)
2. zamiana pl ogonka na cokolwiek (np. "coś" = like %co_%)

zastanawiam sie nad tym (na razie nie wnikam dlaczego mi nie dziala)
3. zamiana pl ogonkow z formularza na bezogonkowy odpowiednik; uzytkownicy maja maniere pisania z ogonkami lub bez (np. like %coś% or like %cos%).

jaki mozna zastosowac mechanizm, zeby pokazywac nie tylko super_trafne wyniki, ale jakos zblizone do szukanej frazy? zamieniac litery na '_' (dowolny znak)? -> jesli tak, to ktore? losowe?

postow na forum przybywa, wyszukiwarka ma byc z zalozenia ulatwiajaca zycie..

z gory dziekuje za pomysly.
Adrian Wieczorek

Adrian Wieczorek Full Stack Developer

Temat: teoretycznie trivia.. search the base

Garsc zagadnien ktorymi warto by sie zainteresowac na poczatek:

1. full text search (MySQL ma to wbudowane)
2. odleglosc levenshteina itp. proste tricki (funkcje w PHP: levenshtein, soundex, similar_text)Adrian Wieczorek edytował(a) ten post dnia 18.12.07 o godzinie 21:58

konto usunięte

Temat: teoretycznie trivia.. search the base

jak dobrze kojarze - przy zastosowaniu powyższych metod (tzn. nie wiem jak (1), ale (2) raczej na pewno) najpierw trzebaby zbudowac liste slow uzywanych przez uzytkownikow na forum (zdaje sie kombajn phpBB ma taka tabele), a dopiero np. soundex()'em sobie robic porownania.

czlowiek uczy sie cale zycie :)

konto usunięte

Temat: teoretycznie trivia.. search the base

Wojtku,

Nie napisałeś o jaką bazę chodzi oraz jak masz rozłożone informacje w niej. Zakładając mysql to fulltext search wydaje się najrozsądniejszy. Nie widzę potrzeby tworzenia do tego żadnego indeksu słów.
Jeżeli chcesz uwzględnić odmianę to proponowałbym doinstalować analizator morfoskładniowy (dla mysql polecam gram neurosoft) i wyszukiwać dopiero po tym co on znajdzie w tekstach. Rozwiązanie do zbudowania w krótkim czasie za to dużo fajnej zabawy.

Jeżeli bazą jest jednak np PostgreSQL to polecam tsearch z indeksem gin, teraz już chyba nawet w standardzie jest.

Generalnie odradzam ilike - to jednak nie sprawdza się przy skalowaniu forum.

Pozdrawiam, Wojtek

konto usunięte

Temat: teoretycznie trivia.. search the base

Witam Imiennika :)

baza to MySQL i nie jest jeszcze jakos super wielka (chyba 15MB jeszcze nie ma).

przeszukiwanie forum na podstawie pola "temat" oraz "treść". mysle, ze opisane w tym watku metody dzialania sa zbyt duze jak na moje oczekiwania, ale warto bylo zapytac - przynajmniej doczytalem to i owo.

az dziw bierze, ze ktos opracowal takie mechanizmy, a ja sie glowic chcialem :)
Piotr Bandyk

Piotr Bandyk E-commerce,
programowanie

Temat: teoretycznie trivia.. search the base

Zapomnij o like w mysql. Przy bardziej złożonym zapytaniu może zawiesić serwer. MySQL z natury bardzo lubi ramy :).

Wykorzystaj 'FULL'a' jak już pisano, lecz i on a błędy - więcej w dokumentacji.

Poczytaj o tym http://www.sphinxsearch.com/. Nie pamiętam już jak dokładnie było, ale chyba 1TB przeszukuje w 1-2 sekundy jak nie szybciej przy minimalnym wykorzystaniu zasobów.
Stanisław P.

Stanisław P. Software designer

Temat: teoretycznie trivia.. search the base

Zawiesić serwer mysql'em? Jeszcze mi się nie udało - przecież nie wyjdzie poza limity z configa - a jeśli config jest przesadzony, to cóż :)

Ale to offtopic. W temacie wyszukiwania => polecam oglądnąć lucene - http://en.wikipedia.org/wiki/Lucene - istnieje praktycznie dla dowolnego języka już i bardzo ładnie radzi sobie z wyszukiwaniem / indeksacją, także po wielu polach, więc można np. w jednym zapytaniu szukać w tytule i treści z boostem dla pierwszego pola. Można też szukać słów podobnych, w określonych odległościach od siebie, etc. Pełny kombajn. Taki sphinx, ale niezwiązany z bazą danych.

konto usunięte

Temat: teoretycznie trivia.. search the base

Polecono dwa systemy na które zerkałem więc pozwolę sobię pociągnąć ten sub-wątek:

Stanisławie, Piotrze - mam pytania do rekomendowanych przez Was rozwiązań:

- na jakich największych (liczba rekordów) bazach to testowaliście i jaki był średni lub maksymalny rozmiar przesziwanego tesktu. Na ile odbijało się to na wydajności.

- czy wyszukiwanie może być zrównoleglone?

- na ile wspierane są polskie słowniki (fleksja, synonimy, rozwijanie skrótów, odrzucanie z indeksu niektórych leksemów)

- czy można ważyć rekordy albo składowe rekordów (tytuł vs opis), ile takich wag może być?

- jak z poszerzaniem słownika lub wyszukiwaniem fraz z poza słownika?

Z góry dziękuję za odpowiedzi. Pozdrawiam, Wojtek
Stanisław P.

Stanisław P. Software designer

Temat: teoretycznie trivia.. search the base

Dawno tego używałem (2 lata ok. ostatni projekt), więc mogę mówić bzdety jeśli chodzi o nową wersję:
Wojciech Jukowski:
- na jakich największych (liczba rekordów) bazach to testowaliście i jaki był średni lub maksymalny rozmiar przesziwanego tesktu. Na ile odbijało się to na wydajności.
Ja na minimalnych :) Zobacz na testy na stronie projektu: http://lucene.apache.org/java/docs/benchmarks.html
Kiedyś mieli stronę z demo online - nie mogę znaleźć linka teraz, może już nie istnieje. W każdym razie przeszukiwała kilkadziesiąt GB danych w czasie poniżej sek.
- czy wyszukiwanie może być zrównoleglone?
Strona serwera? Nie wiem, ale około 2 lata temu chyba nie mogło być. Możesz zawsze sam podzielić indeks na kilka części i zostawić na kilku maszynach.
- na ile wspierane są polskie słowniki (fleksja, synonimy, rozwijanie skrótów, odrzucanie z indeksu niektórych leksemów)
Możesz podpiąć własny tokenizer, analyzer, wykluczenia, etc. Na konferencji java w Krakowie koło marca tego roku ludzie zajmujący się Lucene mówili, że piszą zaawansowany zestaw do analizy .pl - co, gdzie i jakie efekty - nie wiem. Ale jest ruch w tym kierunku, więc można googlać.
- czy można ważyć rekordy albo składowe rekordów (tytuł vs opis), ile takich wag może być?
Lucene ma własny query syntax - wrzucasz tam zupełnie dowolne rzeczy. Z tego co wiem, nie ma ograniczeń co do rozmiarów zapytań. Jak chcesz dorzucić wagi, to pytasz o "tytuł:tekst^3 OR opis:tekst^1.5 OR treść:tekst" np.
- jak z poszerzaniem słownika lub wyszukiwaniem fraz z poza słownika?
Tu nie rozumiem... Indeks jest dynamiczny - zawsze możesz na żywym systemie dodać nowy dokument, albo usunąć istniejący. Jeśli coś się zmieni w danych, to cały dokument musisz wyrzucić i indeksować jeszcze raz. Szukasz po wszystkim co było tokenizowane. Jeśli nie o to chodziło, to spróbuj jeszcze raz ;)

konto usunięte

Temat: teoretycznie trivia.. search the base

Hej

Dzięki za odpowiedzi. Na pewno wystarczą, by dalej samemu już pociągnąć sprawę. Czy znasz jakieś godne polecenia materiały nt lucene (poza oficjalną stroną)?
- jak z poszerzaniem słownika lub wyszukiwaniem fraz z poza słownika?
Tu nie rozumiem... Indeks jest dynamiczny - zawsze możesz na żywym systemie dodać nowy dokument, albo usunąć istniejący. Jeśli coś się zmieni w danych, to cały dokument musisz wyrzucić i indeksować jeszcze raz.

Już doprecyzowuję: na początku napychamy mechanizm jakimś słownkiem, dzięki czemu słowa hufiec i hufce wskazują na to samo słowo. Co jeśli jednak chcę dorzucić do przeszukiwania słowa spoza słownika i dodać dla nich całą odmianę (ostatni kwiatek: kontent, kontentu, kontentowy). Zaraz za tym idzie pytanie - czy można jakoś w lucene podglądać, jakie słowa spoza słownika się zdarzają (np dla leksemów rzeczowniki).

Aha - jeszcze jedno pytanie - czy w L jest jakiś similar-to. Np dla Zyta Gilomska zaproponuje Gilowska? Takie coś jest w Google Search Appliance, Netsprint Site czy Thunderstone Search Appliance tylko słabo jest z panowaniem nad propozycjami.

Pozdrawiam, Wojtek
Stanisław P.

Stanisław P. Software designer

Temat: teoretycznie trivia.. search the base

Wojciech Jukowski:
Już doprecyzowuję: na początku napychamy mechanizm jakimś słownkiem, dzięki czemu słowa hufiec i hufce wskazują na to samo słowo. Co jeśli jednak chcę dorzucić do przeszukiwania słowa spoza słownika i dodać dla nich całą odmianę (ostatni kwiatek: kontent, kontentu, kontentowy). Zaraz za tym idzie pytanie - czy można jakoś w lucene podglądać, jakie słowa spoza słownika się zdarzają (np dla leksemów rzeczowniki).

Tutaj nie wiem, czy pomogę... Wiem, że warstwa analizy tokenów może to robić filtrami (standardowy angielski robi lowercase, normalizację, usuwanie 'a', 'the', itp.) Ale to raczej w lucene nie tworzy słowników jako takich - obrabia się raczej same tokeny oddzielając temat od końcówki. Stempel ma już takie klasy pod lucene przygotowane: http://www.getopt.org/stempel/
Statystyk afaik lucene nie trzyma - ale stawiam, że nie byłoby trudne dodanie tego do źródła.
Aha - jeszcze jedno pytanie - czy w L jest jakiś similar-to. Np dla Zyta Gilomska zaproponuje Gilowska? Takie coś jest w Google Search Appliance, Netsprint Site czy Thunderstone Search Appliance tylko słabo jest z panowaniem nad propozycjami.

Jest fuzzy search. Jeśli query podajesz tekstowo, to "Gilowska~x" np. gdzie 0.0<=x<=1.0, czyli minimalne podobieństwo. Jakiej metryki używa, to nie wiem konkretnie. Możesz dostać zaznaczone wybrać później z wyników jakie to słowo pasowało. Similar-to jako googlowskie znalezienie popularnej frazy podobnej raczej nie ma...



Wyślij zaproszenie do