Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过文本索引搜索Mongo Java驱动程序_Java_Mongodb_Mongo Java Driver - Fatal编程技术网

通过文本索引搜索Mongo Java驱动程序

通过文本索引搜索Mongo Java驱动程序,java,mongodb,mongo-java-driver,Java,Mongodb,Mongo Java Driver,在mongo的java驱动程序中,我使用$text然后$search来查找文档中的内容,但是,这似乎并不总是产生正确的结果,例如有时它会返回没有搜索字符串的项目。这有什么原因吗 回答 您只需转义字符串,mongo就不会使用分隔符。例如: {“$text”:{“$search”:“\“\”“}}作为一个简短的初步说明:您通常应该围绕您的特定问题提供更多的细节和示例。然而,这个问题可能没有这个答案 您正在处理此处的文本(!)索引。这意味着在MongoDB服务器端创建索引时需要做很多工作;这项工作远远

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

回答

您只需转义字符串,mongo就不会使用分隔符。例如:


{“$text”:{“$search”:“\“\”“}}

作为一个简短的初步说明:您通常应该围绕您的特定问题提供更多的细节和示例。然而,这个问题可能没有这个答案

您正在处理此处的文本(!)索引。这意味着在MongoDB服务器端创建索引时需要做很多工作;这项工作远远超出了人们可能期望的那种纯粹的
string.split()

要理解的最重要的事情是,索引不一定包含文本包含的所有值(例如,像“and”或“The”这样的常用词可能被省略),也不一定包含可以在源数据中读取的确切单词,而是词干。关于这里发生的一些事情,可以在这里找到一个很好的解释:

索引引擎中有更多内容,用于处理语言和特殊字符。但所有这些都有很好的记录和说明

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

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

例如,您可以使用以下查询查找所有存储 包含“咖啡”、“商店”和“java”列表中的任何术语:

find({$text:{$search:“java咖啡馆”}})


底线是:当涉及到文本索引时,有相当多的潜在混淆源,因此您需要确保在开始之前已经阅读了它们。

对不起!我真的不知道该怎么说。因为当我创建索引时,我使用了通配符。有可能阻止它使用标点符号和空格作为分隔符吗?我不这么认为。你想具体实现什么?在所有字段中搜索文本字符串。你能给我们一些示例数据和你的索引定义,以及你想支持的一系列示例查询吗?数据如下:
{(“\u id:“Stuff”),“fieldOne”:300,“fieldTwo”:“Big/dumb.potatosald”,“field3”:“rawsoup”,“field4”:“noKetchup”}
为了制作索引,我做了
db.collection.createIndex({“$**”:“text”})
我希望能够运行一个查询,比如
db.collection.find({$text:{$search:{$Big/dumb.potatosald})
并且只返回字段中带有Big/dumb.potatosald的文档