Keresés

Új hozzászólás Aktív témák

  • Gergello

    addikt

    válasz martonx #5661 üzenetére

    Ez az 1 keresés van az egész oldalon, egy nem túl bonyolult query, szerintem én is normálisan megírtam. Miért rontsam le a Google-essel ? Megjelenítésbe nem is tudom, hogyan illeszthető.

    Fizetősöket meg se néztem. Ott láttam, hogy egy konkurencia használja a findologic-ot.

  • Gergello

    addikt

    Sziasztok !

    Nem igazán ismerem ezt a fulltext keresési módot, de találtam egy lekérdezést, amivel kísérletezek és én is írtam egyet saját kútfőből.

    Egy webshop keresést szeretnék megvalósítani, úgy hogy a találatokat relevancia szerint csökkenő sorrendben adja vissza.

    Van egy products nevű tábla mindenféle lényegtelen mező mellett a lényegesek:
    product_model
    product_name
    product_description
    Ezekből egyedül a product_model-en van btree index. /van id mező is, de azt most nem vettem bele ebbe/
    Ezekben szeretnék keresni.

    Amit találtam fulltext lekérdezés, annál azt talapasztalom, hogy bárhogy próbáltam a * karakterrel feljavítani az illesztést, nem tudok vele úgy keresni, hogy pl.
    a keresőszó: "fúró", akkor a "fémfúró"-t tartalmazó sort nem adja vissza, de a "fúrókészlet"-t igen, csak a szavak kezdetére tudok illeszteni.

    Fulltext keresés, nem saját munka: Lehet ezt módosítani, hogy a szavak végére is illesszen? Hiába raktam az elejére (is) csillagot.

    SELECT
        product_name,
        (
            (
                1.3 *(
                    MATCH(product_name) AGAINST(
                        'lyukfúró*' IN BOOLEAN MODE
                    )
                )
            ) +(
                0.6 *(
                    MATCH(product_description) AGAINST(
                        'lyukfúró*' IN BOOLEAN MODE
                    )
                )
            )
        ) AS relevance
    FROM
        products
    WHERE
            status = 1
        AND
            (
                    (MATCH(product_name, product_description) AGAINST('lyukfúró*' IN BOOLEAN MODE))
                OR 
                    LCASE(product_model) LIKE '%lyukfúró%'
            )
    ORDER BY
        relevance DESC,
      LCASE(product_name) ASC

    Erre találtam ki az alábbi megoldást: Mi erről a véleményetek, nagy baromság ?
    Itt a példa keresőszó a "bmw vezérlés benzin", mindegyik szóra csinálok egy ilyen kis csoportot (3 case when) és az where-ben az AND-al kapcsolt részek.

    select
        *,
        (case when product_model like '%vezérlés%' then 10 else 0 end) +
        (case when product_name like '%vezérlés%' then 5 else 0 end) +
        (case when product_description like '%vezérlés%' then 2 else 0 end) +
       
    (case when product_model like '%bmw%' then 10 else 0 end) +
        (case when product_name like '%bmw%' then 5 else 0 end) +
        (case when product_description like '%bmw%' then 2 else 0 end) +
       
    (case when product_model like '%benzin%' then 10 else 0 end) +
        (case when product_name like '%benzin%' then 5 else 0 end) +
        (case when product_description like '%benzin%' then 2 else 0 end) 
        
        as priority
    from
        products
    where 
            (
                product_model like '%vezérlés%'
            or 
                product_name like '%vezérlés%'
            or 
                product_description like '%vezérlés%'
            )
        
        AND
        
            (
                product_model like '%BMW%'
            or 
                product_name like '%BMW%'
            or 
                product_description like '%BMW%'
            )
            
        AND
        
            (
                product_model like '%benzin%'
            or 
                product_name like '%benzin%'
            or 
                product_description like '%benzin%'
            )
    order by 
      priority desc,
        LCASE(product_name) ASC

Új hozzászólás Aktív témák