在mongo的java驱动程序中,我使用$ text然后$ search来查找文档中的内容但是,这似乎并不总能产生正确的结果,例如有时它会返回不具备的内容搜索过的字符串。有这个原因吗?
ANSWER
你可以逃脱字符串而mongo不会使用分隔符。例如:
{"$text" : {"$search" : "\"<insert term here>\""}}
答案 0 :(得分:1)
作为一个快速的初步说明:您通常应该提供有关您的具体问题的更多详细信息和示例。但是,如果没有这个,可以回答这个问题。 ;)
您正在处理文本(!)索引。这意味着MongoDB服务器端在创建索引时已完成了一些工作;工作远远超出人们可能期望的纯粹string.split()
种类。
要理解的最重要的事情是索引不一定包含您的文本包含的所有值(例如,常见的单词,如&#34;和&#34;或&#34;&#34;可能只是省略)它也不一定包含您可以在源数据中读取的确切单词,而是包含词干。关于这里发生的一些事情的一个非常好的解释可以在这里找到:https://blog.codecentric.de/en/2013/01/text-search-mongodb-stemming/
索引引擎内部还有更多处理语言和特殊字符的内容。但是,所有这些都记录在案here和here。
最后,当您搜索字段中包含文本索引所涵盖空格的字符串时,文档的以下部分也与理解相关:
$ text将使用空格和大多数来标记搜索字符串 标点符号作为分隔符,并执行所有此类标记的逻辑OR 在搜索字符串中。
例如,您可以使用以下查询来查找所有商店 包含“coffee”,“shop”和“java”列表中的任何术语:
db.stores.find({$ text:{$ search:&#34; java coffee shop&#34;}})
最重要的是:在文本索引方面存在很多潜在混淆的来源,因此您需要确保在开始之前已经阅读过它们。