簡體   English   中英

MongoDb 全文搜索 AND 條件

[英]MongoDb fulltext search AND condition

我嘗試在 mongodb 中使用文本索引: {$text: {$search: 'sport hockey'}}

是使用 OR 條件按短語搜索:'sport' OR 'hockey'。 例如,結果可以是以下標題列表:

  • 今天運動一些...
  • 運動是曲棍球
  • 曲棍球運動員

最相關的文件位於第二個位置(實際上我想排除除此之外的所有其他結果:“運動是曲棍球”)。 是否可以在 $text 中使用 AND 條件?

引號不合適,因為{$text: {$search: "\\"sport hockey\\""}}使用完全匹配搜索。

嘗試在輸出中包含 textScore,然后按它排序以獲取最相關的文檔(可選地使用 limit 來獲取前 n 個相關文檔)。

db.your_collection.find(
  {
    $text: { $search: "sport hockey" }
  }, {
    score: { $meta: "textScore" }
  }
).sort(
  {
    score: { $meta: "textScore" }
  }
).limit(2)

文本搜索不提供這種現成的。 但是有兩種可能的解決方法。

  1. 使用 2.6 之前的解決方案進行文本搜索:將文本字段分解為單個單詞,並將單個單詞作為數組安全地保存在同一文檔中。 然后,您可以對該數組執行$all查詢。

  2. 對每個單詞執行單獨的文本搜索,並在應用層生成集合交集。

用作關注

db.your_collection.find({$text:{$search:'“運動”“曲棍球”'}})

必須包含“文本”類型的搜索詞!

對於再次訪問此線程的任何人,可以使用以下查找查詢來實現所需的“AND”搜索條件

{$text:{$search:"\"sport\" \"hockey\""}}

注意不同的單詞是如何轉義的。

在節點 js 中,可以執行以下操作來為“AND”條件創建搜索文本

searchText = '"' + userInput.split(" ").join('" "') + '"';

然后

collectionObj.find({$text:{$search:searchText}})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM