MongoDB + Morphia - 使用AND代替OR的全文搜索

时间:2015-09-12 17:40:45

标签: java mongodb morphia

我已经设置了全文搜索和MongoDB,它运行良好(Mongo 2.6.5)。

然而,它使用OR代替和AND。

1)是否可以使查询成为AND查询,同时仍然可以获得全文搜索的所有好处(词干等)

2)如果是这样,是否可以通过Morphia包装器库添加此选项

修改

我看到全文搜索包含返回的每个文档的“得分”。是否可以仅返回具有一定分数或更高分数的文档。是否有一些分数代表“模糊”和查询。通常所有令牌都在文档中,但并非绝对总是如此。如果是这样,这也可以解决问题。

当然,如果可能的话,可以通过Morphia这样做,这将是非常有帮助的。但我也可以使用本机java驱动程序。

任何指向正确的方向,非常感谢。

修改

代码看起来像这样,我正在使用Morphia 1.0.1:

Datastore ds = Dao.instance().getDatabase();
Query<Product> q = ds.createQuery(Product.class).search("grey vests");
List<Product> prods = q.asList();

打印查询给出:

{ "$text" : { "$search" : "grey vests"}}

注意:我可以使用多个结果集的交集来创建AND查询。然而,这是非常缓慢的,因为像“灰色”这样的东西会返回一个庞大的结果集,并且会慢慢反馈结果。

修改

我尝试将search()个来电链接起来,并为每次通话添加一个“令牌”。但是我遇到了运行时错误。代码变为:

q.search("grey").search("vests");

我得到的问题是(看起来它正在做正确的事情)......

{ "$and" : [ { "$text" : { "$search" : "grey"}} , { "$text" : { "$search" : "vests"}}]}

错误是:

com.mongodb.MongoQueryException: Query failed with error code 17287 and error message 'Can't canonicalize query: BadValue Too many text expressions' on server ...
    at com.mongodb.connection.ProtocolHelper.getQueryFailureException(ProtocolHelper.java:93)

0 个答案:

没有答案