包括near和textcriteri在内的多个条件在spring data mongodb中不起作用
我正在尝试进行包括near和textcriteri在内的多个条件在spring data mongodb中不起作用,spring,mongodb,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Data,Spring Data Mongodb,我正在尝试进行geospital查询,包括全文搜索。但它不起作用。 让我分享我的代码。我的mongo实例是2.6,它支持全文搜索。该查询与geoNear和category条件配合良好。但是,当我添加textcriteri时,它不起作用。此外,我不知道如何从Georgesult获得七个对象的列表。 我的第二个问题,是否可以从geo near query返回100多个文档? 因为按照我的要求,;例如,用户将开始搜索前1公里以外的点。然后,如果他想要更多的内容,他可以问“好的,给我内容最少1km,最多
geospital
查询,包括全文搜索
。但它不起作用。
让我分享我的代码。我的mongo实例是2.6
,它支持全文搜索。该查询与geoNear和category条件配合良好。但是,当我添加textcriteri
时,它不起作用。此外,我不知道如何从Georgesult获得七个对象的列表。
我的第二个问题,是否可以从geo near query返回100多个文档?
因为按照我的要求,;例如,用户将开始搜索前1公里以外的点。然后,如果他想要更多的内容,他可以问“好的,给我内容最少1km,最多2km”等等。。。在整个互联网上找不到关于我的问题的任何高级信息。这就是为什么需要你的帮助
public List<SEvent> searchEventByTxt(String txt, String catId, double longitude, double latitude) throws SowException{
Category cat = null;
Query secondQ = null;
if(!catId.equals("-1")){
cat = categoryService.findById(catId);
if (txt != null && txt.length() > 0) {
secondQ = new Query(Criteria.where("catId").is(cat.getId()).and(TextCriteria.forLanguage(new Locale(SOW.Session.current().getLang()).getLanguage()).matching(txt).getKey()));
} else {
secondQ = new Query(Criteria.where("catId").is(cat.getId()));
}
} else {
if (txt != null && txt.length() > 0) {
secondQ = new TextQuery(TextCriteria.forLanguage(new Locale(SOW.Session.current().getLang()).getLanguage()).matching(txt));
}
}
Point point = new Point(longitude, latitude);
NearQuery nq = NearQuery.near(point).maxDistance(new Distance(2, Metrics.KILOMETERS));
if(secondQ != null)
nq.query(secondQ);
GeoResults<SEvent> res = mo.geoNear(nq, Adv.class);
List<GeoResult<SEvent>> list = res.getContent();
for (GeoResult<SEvent> geoResult : list) {
System.out.println(geoResult.getContent().getTitle());
}
return null;
}
公共列表searchEventByTxt(字符串txt、字符串catId、双经度、双纬度)引发异常{
类别cat=null;
Query secondQ=null;
如果(!catId.equals(“-1”)){
cat=类别服务findById(catId);
如果(txt!=null&&txt.length()>0){
secondQ=新查询(Criteria.where(“catId”).is(cat.getId())和(TextCriteria.forLanguage)(新语言环境(SOW.Session.current().getLang()).getLanguage()).matching(txt.getKey());
}否则{
secondQ=新查询(Criteria.where(“catId”).is(cat.getId());
}
}否则{
如果(txt!=null&&txt.length()>0){
secondQ=newtextQuery(TextCriteria.forLanguage(新语言环境(SOW.Session.current().getLang()).getLanguage()).matching(txt));
}
}
点=新点(经度、纬度);
NearQuery nq=NearQuery.near(point).maxDistance(新距离(2,Metrics.km));
if(secondQ!=null)
nq.查询(secondQ);
地理结果res=mo.geoNear(nq,Adv.class);
List=res.getContent();
对于(Georgesult Georgesult:list){
System.out.println(geoResult.getContent().getTitle());
}
返回null;
}
请参阅此文档:并非所有索引组合都受支持谢谢您的回答。是的,你是对的。有趣!这是一个非常普遍的情况。很遗憾我不能那样做。你有什么建议吗?有用于文本搜索的高级正则表达式吗?