Java Mongodb查询以匹配按空格分隔的单词
我正在使用ajax、servlet和mongodb实现自动完成功能。现在,我已经实现了一个逻辑,它似乎部分工作 例如: 在数据库中,如果我有以下产品Java Mongodb查询以匹配按空格分隔的单词,java,ajax,mongodb,servlets,pattern-matching,Java,Ajax,Mongodb,Servlets,Pattern Matching,我正在使用ajax、servlet和mongodb实现自动完成功能。现在,我已经实现了一个逻辑,它似乎部分工作 例如: 在数据库中,如果我有以下产品 1. Xbox Amazon 2. Amazon xyz 当用户输入ama时,结果应该包含这两个产品。但我只得到amazonxyz 这是我用java编写的逻辑 DBCollection products = db.getCollection("Products"); BasicDBObject dbObj =
1. Xbox Amazon
2. Amazon xyz
当用户输入ama
时,结果应该包含这两个产品。但我只得到amazonxyz
这是我用java编写的逻辑
DBCollection products = db.getCollection("Products");
BasicDBObject dbObj = new BasicDBObject();
dbObj.put("modelName", Pattern.compile("^"+request.getParameter("startswith"),Pattern.CASE_INSENSITIVE));
DBCursor cursor = products.find(dbObj);
只使用搜索字符串作为模式,在这种情况下它将起作用。您创建的模式不起作用的原因是
^
意味着字符串应该以以下模式开头。您可以使用\b
(单词边界)来代替^
dbObj.put("modelName", Pattern.compile("\\b"+request.getParameter("startswith"),Pattern.CASE_INSENSITIVE));
这将允许您搜索不是字符串开头的单词,也不匹配包含
ama
的字符串(例如:Obama
未返回)非常感谢您的回答,但我已经尝试过了。不使用^is的问题是,查询将显示所有匹配的单词。假设,如果键入x
,则会显示其中包含x的所有单词。我正在尝试做一些像这个购物网站做的事情。像百思买沃尔玛和其他公司一样,所有包含“x”的字符串和包含“ama”的字符串在逻辑上没有区别。为了避免查找所有与x匹配的单词,您应该仅在搜索字符串具有一定大小(例如三个字符)时执行查询。非常感谢!这正是我想要的。我已经回滚了你的编辑。如果你想删除内容,我建议你使用文章底部的标志链接,并询问版主有哪些选项。