بحث Atlas

قم بتكوين مشغل Atlas Search، المركب / الفلتر، النتيجة، التمييز، تسلسل الرموز، الترقيم / العد وفقًا للإصدار 1.0.0.


Atlas Search الأساسي

java
Flux<Article> results = dsl
    .executeEntity(Article.class, MongoTemplateName.FRONT)
    .search("articles_default")
    .text(text -> text
        .path("title")
        .query("reactive mongo dsl")
    )
    .findAll()
    .execute();

يجب أن يكون $search و $searchMeta المرحلة الأولى من خط أنابيب التجميع، لذا فهي مفصولة عن تدفق fields(...).end(). يمكن أيضًا استخدام .search() بدون فهرس.

مشغل البحث

• باني الجذر: text, phrase, autocomplete, equals, exists, in, range, compound

• شرط قابل لإعادة الاستخدام: SearchOperators.text/phrase/autocomplete/equals/in/exists/range

• مشغل الجذر الأصلي: operator(SearchOperator)

• غلاف السائق المسماة: SearchOperators.driver(name, operator)

java
.search("articles_default")
.compound(compound -> compound
    .mustText("title", text -> text.query("mongodb"))
    .shouldText("summary", text -> text.query("mongodb"))
    .filterEquals("status", eq -> eq.value("PUBLISHED"))
    .mustNotExists("deletedAt")
    .minimumShouldMatch(0)
)
.findAll()
.execute();

يدعم compound must, mustNot, should, filter, minimumShouldMatch, score ويمكن أيضًا تمرير مشغل AtlasSearchOperator العادي مباشرة.

نص / عبارة / إكمال تلقائي

java
.text(text -> text
    .paths("title", "summary")
    .query("reactive mongo dsl")
    .matchCriteria(SearchMatchCriteria.ALL)
    .fuzzy(1, 1, 50)
    .score(SearchScoreSpec.boost(3.0))
)

• text: المسار (المسارات)، الاستعلام (الاستعلامات)، ضبابي، معايير المطابقة، مرادفات، نتيجة

• phrase: المسار (المسارات)، الاستعلام (الاستعلامات)، انزلاق، مرادفات، نتيجة

• autocomplete: مسار واحد، استعلام (استعلامات)، ترتيب الرموز، ضبابي، نتيجة

• لا تستخدم fuzzy(...) و synonyms(...) في نفس الوقت.

اختلاف شرط البحث وحقول ما بعد البحث

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.fields(
    pair("deleted", false),
    pair("status", "PUBLISHED")
)
.findAll()
.execute();

search().fields(...) ليس فلتر داخل $search بل هو $match العادي بعد $search. لاستخدام compound.filter(...) لتقييد المرشحين في مرحلة فهرس البحث.

text
$search
-> stage(Bson) if configured
-> $match (fields)
-> metadata addFields / score match
-> paging
-> projection

النتيجة والترتيب

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.addFieldsScore("searchScore")
.matchScoreGte(1.5)
.scoreDesc()
.sorts(sort -> sort.desc("publishedAt").desc("id"))
.findAll()
.execute();

تحدد scoreDesc() / scoreAsc() والأولوية العامة حسب ترتيب الاستدعاء. من الأفضل وضع ترتيب حقل فريد مستقر مع النتيجة لضمان ترقيم مستقر.

تمييز / تفاصيل النتيجة / تسلسل الرموز

java
.search("articles_default")
.text(text -> text.path("title").query("mongodb"))
.highlight(highlight -> highlight
    .path("title")
    .maxCharsToExamine(100_000)
    .maxNumPassages(3)
)
.addFieldsHighlights()
.addFieldsScoreDetails()
.addFieldsSequenceToken()
.findAll()
.execute();

الاسم المستعار الافتراضي هو highlights و scoreDetails و searchSequenceToken. addFieldsScoreDetails() يقوم أيضًا بتفعيل تفاصيل الدرجات في خيارات البحث.

التصفح / رمز التسلسل / العدد

java
Mono<PageResult<Article>> page = dsl
    .executeEntity(Article.class, key)
    .search("articles_default")
    .text(text -> text.path("title").query("mongodb"))
    .paging(0, 20)
    .findAll()
    .executePage();

// sequence token
.searchAfter(token)
// or
.searchBefore(token)

count().execute()

عدد خط الأنابيب النهائي الذي يعكس fields(...) وعتبة الدرجات بعد البحث.

count().executeSearchMeta()

عدد بيانات التعريف searchMeta. يدعم SearchCountType.TOTAL/LOWER_BOUND ولا ينفذ $match بعد البحث.

existsQuery().execute()

يتحقق مما إذا كانت نتائج خط أنابيب البحث تحتوي على أكثر من سجل واحد.

توسيع Driver-native

java
.search("search-index")
.operator(driverSearchOperator)
.driverOptions(options -> options.option("someNewOption", value))
.stage(Aggregates.score("$rating"))
.findAll()
.execute();

stage(Bson) يأتي مباشرة بعد $search ولا ينطبق على خط أنابيب عدد بيانات التعريف $searchMeta لـ executeSearchMeta(). إذا تمت إضافة ميزات جديدة للسائق قبل واجهة برمجة التطبيقات المريحة DSL، يتم استخدام operator و driverOptions و stage و SortSpec.driver و customizeAggregation أولاً.

© 2026 بيولناريم. جميع الحقوق محفوظة.مقدمةسياسة معالجة المعلومات الشخصية