Mongo Java Driver按文本索引搜索

时间:2017-12-04 16:52:47

标签: java mongodb mongo-java-driver

在mongo的java驱动程序中,我使用$ text然后$ search来查找文档中的内容但是,这似乎并不总能产生正确的结果,例如有时它会返回不具备的内容搜索过的字符串。有这个原因吗?

ANSWER

你可以逃脱字符串而mongo不会使用分隔符。例如:

{"$text" : {"$search" : "\"<insert term here>\""}}

1 个答案:

答案 0 :(得分:1)

作为一个快速的初步说明:您通常应该提供有关您的具体问题的更多详细信息和示例。但是,如果没有这个,可以回答这个问题。 ;)

您正在处理文本(!)索引。这意味着MongoDB服务器端在创建索引时已完成了一些工作;工作远远超出人们可能期望的纯粹string.split()种类。

要理解的最重要的事情是索引不一定包含您的文本包含的所有值(例如,常见的单词,如&#34;和&#34;或&#34;&#34;可能只是省略)它也不一定包含您可以在源数据中读取的确切单词,而是包含词干。关于这里发生的一些事情的一个非常好的解释可以在这里找到:https://blog.codecentric.de/en/2013/01/text-search-mongodb-stemming/

索引引擎内部还有更多处理语言和特殊字符的内容。但是,所有这些都记录在案herehere

最后,当您搜索字段中包含文本索引所涵盖空格的字符串时,文档的以下部分也与理解相关:

  

$ text将使用空格和大多数来标记搜索字符串   标点符号作为分隔符,并执行所有此类标记的逻辑OR   在搜索字符串中。

     

例如,您可以使用以下查询来查找所有商店   包含“coffee”,“shop”和“java”列表中的任何术语:

     

db.stores.find({$ text:{$ search:&#34; java coffee shop&#34;}})

最重要的是:在文本索引方面存在很多潜在混淆的来源,因此您需要确保在开始之前已经阅读过它们。