Tam Mətn Axtarış Part 1: MongoDB tam və qismən mətn axtarışını necə yaratmaq olar

Ön söz:

Axtarışın tələb olunduğu ərizə üzərində işləyirəm. Bu axtarış əlavələr üçündür. Bir çox istifadəçi veb saytına gedərək alt qovluqlarla qovluq quruluşu yaradır və sənədləri yükləyir. Bu sənəd ümumiyyətlə Microsoft sənədidir, docx, xlsx, xls, .csv və PDF. Node tətbiqindən istifadə edərək AWS S3 kovasına qənaət etmək üçün sənədi memarlaşdırdım. Oxucu S3 çömçəsinə yazarkən eyni zamanda məzmunu oxuyuruq və MongoDB-də saxlayırıq. Sənədlər zərf şifrələməsini istifadə edərək S3 kovasında təmin edilir. Şifrəli faylı bu linkdə s3 çömçə yükləmək üçün artıq bir məqalə yazmışam.

Bu yazı MongoDB, endeksləmə əsasında tam mətn axtarışı haqqında. Söhbət Elastik axtarış, Redis əsaslı axtarış və ya Amazon bulud axtarışından getmir. Bu axtarış sadə tətbiqlər üçün yüngül axtarışdır. Bu axtarış indeksləmə və axtarış kimi SQL-yə çox etibar edir. Bu axtarışda axtarış motoru optimallaşdırması və ya veb tarama və s. Xüsusiyyətlərdən istifadə olunmur. Redis axtarışı üçün Tam mətn axtarışı 2-ci hissəsinə baxın.

İstifadə olunan xüsusiyyətlər:

  1. MongoDB son versiyası kimi, mətn tərkibində axtarışlar nümayiş etdirən mətn axtarışı təmin olunur.
  2. Mətn məzmununda həssas olmayan axtarışa dəstək verin.
  3. Və ya və ya dayandırma söz axtarışlarını təmin edin. Həm də dil əsaslı qayda təmin edin. yəni mübahisə, mübahisə etmək, mübahisə etmək, mübahisə etmək və kök mübahisə etmək.
  4. Oxşar səsli sözləri axtarın, yəni LEONARD, LEON və s.
  5. Hesab əsasında axtarış sıralaması. Hesab, sözün tezliyinə və bir çox digər amillərə əsaslanan müəyyən bir alqoritmə əsaslanır.
  6. Mongoose-da yaddaşın avtomatik tamamlanması üçün bu linki istifadə edin.

İndeksləmə yaradın:

Mongoose sxemində indeksləmə yaradın. Burada fayl məzmununu, fayl metadatasını saxlayan və sonra metadata və məzmuna indeksləmə yaradan sadə bir faylContentSchema yaradıram.

Bütün sətirləri axtarışlara daxil etmək istəyirsinizsə, onda '$ **' olan işarəli axtarış yaradın.

fileContentSchema.index ({'$ **': 'mətn'});

Axtarış API:

Sxem və indeksləmə hazır olduqdan sonra API-də model və idxal modeli yaradın. FileContents modelini yaratdıq və API-yə ixrac etdik. İndi tapın axtarış modeli. $ ya da axtarış parametrlərinin silsiləsini alacaq. Sonda sorğunu textScore əsasında sıralayın.

Wildcard axtarış API bu şəkildə edilə bilər:

fileContents.find ({$ text: {$ search: request.searchtext}}) .skip (20) .limit (10) .exec (funksiya (məlumat, məlumat)) {
// buraya cavab göndərin
});

Mühüm metodlardan biri, izah etməkdir, sort () ilə zəncirlənmişsə, axtarışın necə aparıldığını izah edir.

. izah edin (doğru)

Qiymət, Çatışmazlıq və Performans:

  • Tam mətn axtarışları MongoDB dünyasında yenidir və yavaş-yavaş daha yaxşıya doğru inkişaf edir.
  • Tam mətn axtarışları özü dəyəri ilə gələn indekslərə əsaslanır. Yeni sənəd əlavə edildikdə indekslər yenidən düzəldilir.
  • Tam mətn axtarışları ən son axtarışları önə keçirmir, yəni Redis-də axtarışları önə keçirir və məlumatların daha yaxşı işləməsini və mövcudluğunu təmin edir.

Qoşulmaq:

Bu yazıda MsenoDB axtarışının ssenarisini və ehtiyacını gördük. Mongoose sxemini necə yaratmağı gördük və məzmunu indeksləşdirdik. $ Mətni istifadə edərək axtarış ilə də API yaratdıq. Bundan əlavə, vəhşi yerdəki axtarışları və indeks axtarışının çatışmazlıqlarını da gördük. Qismən Redis ilə tam mətn axtarışını əhatə edəcəyik. Redis Tam mətn axtarışı üçün çox sürətli modul təmin edir.

Mən istinadlar əlavə etdim, bu sənədlərdə çox aydın olmayan məqamları işıqlandırmağa çalışdım.

İstinadlar: