簡體   English   中英

如何為 MongoDB 上的部分文本搜索創建索引?

[英]How to create an index for partial text search on MongoDB?

我正在遵循教程說明: https://docs.mongodb.com/manual/core/index-text/

這是樣本數據:

db.stores.insert(
   [
     { _id: 1, name: "Java Hut", description: "Coffee and cakes" },
     { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
     { _id: 3, name: "Coffee Shop", description: "Just coffee" },
     { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
     { _id: 5, name: "Java Shopping", description: "Indonesian goods" }
   ]
)

案例 1: db.stores.find( { $text: { $search: "java coffee shop" } } ) => FOUND

案例 2: db.stores.find( { $text: { $search: "java" } } ) => FOUND

案例 3: db.stores.find( { $text: { $search: "coff" } } ) => NOT FOUND

我希望找到案例 3,因為查詢與java java coffee shop的一部分匹配

案例 3 不適用於 $text 運算符,原因是 Mongo 創建文本索引的方式。

Mongo 采用文本索引字段值並為字符串中的每個唯一單詞而不是字符(。)創建單獨的索引。

所以這意味着,在您的情況下,對於 1 object:

字段名稱將有 2 個索引:

  • java
  • 小屋

字段描述將有 3 個索引:

  • 咖啡
  • 蛋糕

$text 運算符將 $search 值與此索引進行比較,這就是“coff”不起作用的原因。

如果您強烈希望利用索引,則必須使用 $text 運算符,但它並不能像您想要的那樣為您提供所有靈活性。

解決方案

您可以簡單地將 $regex 與區分大小寫選項 (i) 一起使用,並使用跳過和限制來優化您的查詢。

如果要返回所有文檔且集合很大,$regex 會導致性能問題

您還可以查看這篇文章https://medium.com/coding-in-depth/full-text-search-part-1-how-to-create-mongodb-full-and-partial-text-search-c09c0bae17a3和也許為此使用通配符索引,但我不知道這是否是一個好習慣。

暫無
暫無

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

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