[英]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 個索引:
字段描述將有 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.