Prodej projektu Duchod.cz - cena 550 tis Kč. Dále MojeFinance.cz, DuchodovaReforma.cz
Zobrazují se odpovědi 1 až 9 z 9

Hledání celých slov ve sloupci

  1. Ahoj, potřeboval bych poradit. Nevím jak napsat dotaz aby vyhledal ve sloupci celá slova. Příklad

    mám v tabulce názvy

    Motor
    Motorek stěračů
    Octavia motor
    Motor 1,6 TDI
    Motorek stahovačky
    Kapota motoru

    pokud napíšu
    Kód:
    nazev like '%motor%'
    tak mi to vyhledá všechny řádky

    pokud napíšu
    Kód:
    nazev = 'motor'
    tak mi to vyhledá první řádek

    pokud napíšu
    Kód:
    nazev like 'motor'
    tak mi to vyhledá první řádek

    jak mám napsat dotaz, aby vyhledal pouze 1,3,4 řádek, kde je v názvu slovo motor jako samostatné slovo.

  2. Co se právě děje na Webtrhu?
  3. fulltext search
    vytvor si nad stlpcom/stlpcami v torych chces hladat fulltext index a ootom uz query mas
    Kód:
    select * from tabulka WHERE MATCH(stlpec) AGAINST ('motor' IN NATURAL LANGUAGE MODE);
    na klasicky like zabudni ten to spravit nevie musel by si mat:
    Kód:
    where (nazev like 'motor)' or (nazev like 'motor %') or (nazev like '% motor') or (nazev like '% motor %')
    ale to by si tu DB zabil lebo nevies pouzit index a trvalo by to strasne dlho

  4. Kód:
    MariaDB [motor]> CREATE TABLE nazvy
        -> (
        ->      id int auto_increment primary key, 
        ->      detail varchar(30)
        ->     );
    Query OK, 0 rows affected (0.11 sec)
    
    MariaDB [motor]> 
    MariaDB [motor]> INSERT INTO nazvy
        -> (detail)
        -> VALUES
        -> ('Motor'),
        -> ('Motorek stěračů'),
        -> ('Octavia motor'),
        -> ('Motor 1,6 TDI'),
        -> ('Motorek stahovačky'),
        -> ('Kapota motoru');
    Query OK, 6 rows affected (0.00 sec)
    Records: 6  Duplicates: 0  Warnings: 0
    
    MariaDB [motor]> select *  from nazvy;
    +----+---------------------+
    | id | detail              |
    +----+---------------------+
    |  1 | Motor               |
    |  2 | Motorek stěračů     |
    |  3 | Octavia motor       |
    |  4 | Motor 1,6 TDI       |
    |  5 | Motorek stahovačky  |
    |  6 | Kapota motoru       |
    +----+---------------------+
    6 rows in set (0.00 sec)
    
    MariaDB [motor]> select * from nazvy where detail rlike "[[:<:]]motor[[:>:]]";
    +----+---------------+
    | id | detail        |
    +----+---------------+
    |  1 | Motor         |
    |  3 | Octavia motor |
    |  4 | Motor 1,6 TDI |
    +----+---------------+
    3 rows in set (0.00 sec)
    Nejak takhle?

  5. rozděl si ty texty na jednotlivá slova a ulož do relačni tabulky, pak můžeš nad tím sloupcem udělat index a databáze ti bude vděčná.

    Použij fulltext či like (viz první odpověď; částečně dotaz totiž používá indexy) a až v php odfiltruj výsledky, kde je hledaný výraz součástí slova.

    Řešení od vdusek je také funkční, chce jen dát pozor jak bude rozsáhlá databáze a samozřejmě si ten regulár vyladit, teď třeba nenajde “Motor!”. Na to bys musel poskytnou více textů.

    O jaký počet textů se jedná?

  6. Díky za rady,
    databáze má jen 200 tis záznamů, což zas není moc, ale právě hledání tohoto typu vždy tu DB uzemní.

    tabulka obsahuje sloupce název, znacka, model, motorizace, motor_typ, motor_kod, rok_vyroby ....... a tak ještě deset dalších
    První pokus by vytvořit vyhledávací formulář na všechny tyto položky, což není v mobilu možné vytvořit tak aby se to vešlo na obrazovku.
    Druhý pokus byl jedno vyhledávací pole po vzoru googlu :) kde uživatel může napsat cokoliv = více slovní spojení nehledě na pořadí slov.

    Pak řetězec rozdělím dle mezer na jednotlivá slova, vyhodím slova, "nad, pod, před, v, a," a další a vytvořím si pole slov.
    pak skládám dotaz a jednotlivá slova hledám postupně v těch deseti sloupcích.

    pokud mi ale někdo vyhledá písmeno "e" pak to najde všechna slova obsahující e a taky to trvá dlouho.

    přemýšlím nad variantou, že vytvořím nový sloupec, kam seskupím všechen obsah ze sloupců ve kterých vyhledávám a budu hledat jen v jednom sloupci, ale jak velkou hodnotu var mám uvést když se vyhledává i popisu, kde je někdy více textu.

    Ten předchozí dotaz byl spíše zaměřen zda by hledal přesněji ale když loguji slova co lidé používají pro hledání, ztrácím naději.

    jako včera při testování přišel mechanik ze servisu a napsal "octavia2 lp.svetlo" a strašně se divil že se mu nic nevyhledalo :)

  7. 200 tis položek na vyhledávání přes regexp či rlike je dost, pokud to máš napojený na vyhledávací formulář, jeden robot ti usmaží celou databázi a web nebude funkční.

    K tomuhle se dá vyladit mysql fulltext, ideálně slova umístit do jedné tabulky, vkládat je tam ve více variantách (s/bez diakritiky, ve zkratkách či přepsané zkratky na slova atd.), na tenhle sloupec si nastavit fulltext a poté spojovat s původní tabulkou a deduplikovat vyhledané výrazy.

    Pokud máš dostupné vlastní vps/servery, elasticsearch funguje jako magie skoro sám od sebe a nejspíš i s výchozím indexerem ti poskytne to co ti dostačuje, 200 tis položek je málo a paměti nebudeš tolik potřebovat.

  8. Já vím, že se Ti to nebude líbit, ale tady k tomu teď přistupujeme moc programátorsky. Lepší je přístup UX a dát si čas analýzou, co vlastně uživatelé potřebují, chtějí a jsou schopni použít. Jenže kdo na to má? :-(

    Zvlášť, když to chceš narvat na screen mobilu!

    Řešením by samozřejmě bylo "chytré" hledání, kde máš dobrou databázi vozů a dílů (nejen jako seznam dílů, ale skutečně jako databáze toho, jak to i lidi zadávají, když to hledají)...

    To víceméně už sám moc dobře vidíš na jediném dotazu zmíněného mechanika...

  9. Citace Původně odeslal aheadnology Zobrazit příspěvek
    Já vím, že se Ti to nebude líbit, ale tady k tomu teď přistupujeme moc programátorsky. Lepší je přístup UX a dát si čas analýzou, co vlastně uživatelé potřebují, chtějí a jsou schopni použít. Jenže kdo na to má? :-(

    Zvlášť, když to chceš narvat na screen mobilu!

    Řešením by samozřejmě bylo "chytré" hledání, kde máš dobrou databázi vozů a dílů (nejen jako seznam dílů, ale skutečně jako databáze toho, jak to i lidi zadávají, když to hledají)...

    To víceméně už sám moc dobře vidíš na jediném dotazu zmíněného mechanika...
    databázi vozidel a dílů mám, data od uživatelů co vpisují do hledání také, problémem je, že uživatelé hledají věci pod jiným názvem a nebojí se použít zdrobněliny nebo dokonce hovorové výrazy, zkratky.
    Už se dokonce přibližuji googlu :) kdy v systému aktualizuji překladové slovníky.
    uživatel napíše "haupna" a systém odpoví: neměli jste namysli kapotu motoru ? někdo tomu říká "víko kufru" nebo "krycí díl motorové části"
    pak s tím má člověk pracovat.

    ---------- Příspěvek doplněn 14.02.2019 v 12:52 ----------

    Citace Původně odeslal TomášX Zobrazit příspěvek
    200 tis položek na vyhledávání přes regexp či rlike je dost, pokud to máš napojený na vyhledávací formulář, jeden robot ti usmaží celou databázi a web nebude funkční.

    K tomuhle se dá vyladit mysql fulltext, ideálně slova umístit do jedné tabulky, vkládat je tam ve více variantách (s/bez diakritiky, ve zkratkách či přepsané zkratky na slova atd.), na tenhle sloupec si nastavit fulltext a poté spojovat s původní tabulkou a deduplikovat vyhledané výrazy.

    Pokud máš dostupné vlastní vps/servery, elasticsearch funguje jako magie skoro sám od sebe a nejspíš i s výchozím indexerem ti poskytne to co ti dostačuje, 200 tis položek je málo a paměti nebudeš tolik potřebovat.
    jdu nastudovat elasticsearch, zdá se to být cesta

  10. nedávno tady o tom bylo podobné vlákno https://webtrh.cz/418659-rychly-full...-slov-produktu

    Ano, dotaz byl programátorský, odpovědi také :). Určitě souhlasím s tím, že je potřeba jít i ze strany UX, a to v první řadě. Dělal jsem i fulltext tak, že jsem měl data přímo v php souboru a zaměřil se hlavně na to, aby to dobře hledalo přesně tak, jak uživatel očekává.

Hostujeme u Server powered by TELE3