在 MongoDB 中,如果我的文本包含 UUID,文本是如何提取的?

汤姆耶

我正在调查 MongoDB 中集合的缓慢更新。
以前的同事为_id字段选择了字符串类型,并根据其他字符串字段建立索引。

现在我明白文本索引是有梗的,我可以想象更新文档时这可能会很重。-field
的内容_id也是一个 UUID。现在我不完全理解词干是如何工作的,但是猜测 UUID ( part1-part2-part3-part4-etc) 的每个部分成为索引中的唯一条目,导致查询变慢。

有人可以解释词干提取如何处理包含 UUID 的文本吗?

斯坦尼

Stemming 仅适用于作为text索引一部分的字符串字段默认_id索引的选项不能更改,_id索引不能是text索引,因此词干提取不适用于此上下文。_id值是索引中的单个条目,必须是唯一的。

现在我不完全理解词干是如何工作的,但是猜测 UUID ( part1-part2-part3-part4-etc) 的每个部分成为索引中的唯一条目,导致查询变慢。

Stemming使用特定于语言的启发式方法将单词简化为它们预期的词根形式。词干库具有语言的典型屈折规则的概念,但对有效单词或语法没有任何理解。text索引定义中包含 UUID 字段(或其他随机的非语言字符串)通常没有意义

MongoDBtext索引使用开源Snowball 库进行词干提取。

有人可以解释词干提取如何处理包含 UUID 的文本吗?

最好的方法是解释 MongoDB$text查询以准确了解它们是如何解析的。但是,还有一个在线 Snowball 演示,如果您想快速尝试不同语言的词干提取算法,它会很有用。

MongoDBtext索引或$text查询会将空格和大多数标点字符(包括连字符)视为单词分隔符,因此part1-part2-part3-part4-etc将分为 5 个term每个术语都将被截断,任何重复的术语都将被忽略。由随机字母或值组成的术语part1不会有词干启发式意外匹配之外的根形式。

例如,在英语中:

  • 以单字结尾的词s一般是复数。如果你随便编一个单词 like part4s,它就会干到part4
  • 以 结尾的词ss通常不是复数,因此part4ss将保持不变。

您可以通过解释文本搜索查询并查看parsedTextQuery.

使用mongo外壳:

> db.stores.createIndex( { name: "text", description: "text" } )
> db.stores.find( { $text: { $search: "part1-part2-part3-part4-etc-part4s-part4ss" } } ).
       explain().queryPlanner.winningPlan.parsedTextQuery
{
    "terms" : [
        "etc",
        "part1",
        "part2",
        "part3",
        "part4",
        "part4ss"
    ],
    "negatedTerms" : [ ],
    "phrases" : [ ],
    "negatedPhrases" : [ ]
}

在您的示例 UUID 中添加了part4spart4ss由于part4s词干到part4(这已经是一个独特的术语),您会注意到我的查询仅找到 6 个术语而不是 7 个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以减少mongodb中的文本吗?

我如何在mongodb中的数组中查找文本搜索

Xamarin 如果包含减号,我如何更改标签文本颜色

为什么readlines()在我的文本文件中包含\ n字符(如果不存在)?

如果key是mongodb中的uuid,如何选择值

我如何知道ArrayList在mongoDB中是否包含特定项目?

如果文本中包含“内部”,如何使用SUBSTITUTE

如果元素包含文本

如果excel中的列同时包含数字和文本,则仅提取文本

如何检测文本是否包含 [FSI]*[PDI]

如何检查文本是否包含西里尔字符

如何检查按钮的文本是否包含数组的元素?

如何使用 Golang 在 MongoDB 中存储 UUID?

如何检查网页元素中匹配的文本是否部分包含在 <a> 标签中?

如何从单词表中查找行或文本是否包含特定单词?

如何检查Web上选定的文本是否仅包含JavaScript中的单词?

如何检查文本是否包含Golang列表中的任何单词?

如果在MongoDB集合中需要多个文本索引,该怎么办?

如何断言表单字段包含一些文本,而不管 Cypress 中的文本是什么?

MongoDB - 如果对象包含低于 x 的值,如何删除数组中的对象?

Mongodb源文本

MongoDB文本索引搜索

MongoDB $文本搜索

MongoDB文本搜索“ Some”

NET中MongoDB中的全文本搜索

如果我有表格ID标签,如何删除包含特定ID作为文本的行?

如何在MongoDB的文本搜索中查看“ queryDebugString”?

如何使用 pymongo 在 mongoDB 中创建通配符文本索引?

如何检查文本框中的文本是否是您想要的文本(php / html)