بحث Atlas
قم بتكوين مشغل Atlas Search، المركب / الفلتر، النتيجة، التمييز، تسلسل الرموز، الترقيم / العد وفقًا للإصدار 1.0.0.
Atlas Search الأساسي
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)
.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 العادي مباشرة.
نص / عبارة / إكمال تلقائي
.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(...) في نفس الوقت.
اختلاف شرط البحث وحقول ما بعد البحث
.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(...) لتقييد المرشحين في مرحلة فهرس البحث.
$search
-> stage(Bson) if configured
-> $match (fields)
-> metadata addFields / score match
-> paging
-> projectionالنتيجة والترتيب
.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() والأولوية العامة حسب ترتيب الاستدعاء. من الأفضل وضع ترتيب حقل فريد مستقر مع النتيجة لضمان ترقيم مستقر.
تمييز / تفاصيل النتيجة / تسلسل الرموز
.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() يقوم أيضًا بتفعيل تفاصيل الدرجات في خيارات البحث.
التصفح / رمز التسلسل / العدد
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
.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 أولاً.