我已经设置了全文搜索和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)