/ / Jarné údaje + Mongo vyhľadávanie textov bez ohľadu na veľkosť písmen - java, mongodb, jarné údaje, jar-data-mongodb

Spring Data + Mongo case-insensitieve Textové vyhľadávanie - java, mongodb, spring-data, spring-data-mongodb

Snažím sa implementovať vyhľadávanie textov, ktoré nie sú citlivé na veľké a malé písmená, v niekoľkých oblastiach v mongodb pomocou jarných úložísk údajov. Našiel som 2 riešenia, z ktorých každé má niekoľko nevýhod:

  1. Použitie regexu:

    @Query("{"status": "ACTIVE", $or: [{"title": {$regex : ?0, $options: "i"}}, {"location.text": {$regex : ?0, $options: "i"}}]}")
    Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
    

Takýto dotaz zlyhá pri reťazcoch "/", "*" a vracia savšetky položky na „.“, takže musím týmto znakom uniknúť alebo ich nejako filtrovať, ale ani neviem, koľko takýchto otázok môže existovať. Moja otázka je, ako na 100% zaistiť, aby dotaz vykonával vyhľadávanie a zaobchádzal s každým znakom ako s obyčajným, nie so špeciálnym.

  1. Použitie $ textového indexu si vyžaduje vytvorenie tohto indexu skôr (nie je to problém). Riešenie má tiež lepší výkon, nie?

    @Query("{"status": "ACTIVE", $text: {$search: ?0}}")
    Page<Article> findAllActiveBySearchString(String search, Pageable pageable);
    

Zaujímalo by ma, že to nie je malé a veľké písmená, takže musím vytvoriť špeciálne pole s malými údajmi a indexovať ho - je to jediný spôsob, ako dosiahnuť môj cieľ, alebo mi niečo uniklo?

odpovede:

0 pre odpoveď č. 1

MongoDb nie je optimalizovaný pre fulltextové vyhľadávanie, takže sa musíte vyrovnať s obmedzením alebo použiť iný vyhľadávací nástroj, ako je elasticsearch alebo solr.

Interne robia to isté, čo robíte. Napríklad pomocou rôznych analyzátorov, ako sú malé písmená, filtrovanie stopových slov, vytváranie slovných tokov alebo n-gram, sa dá použiť fuzzy vyhľadávanie.

Ak sa chcete držať MongoDb, musíte tieto funkcie písať a indexovať sami.