Java 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 =

我正在使用ajax、servlet和mongodb实现自动完成功能。现在,我已经实现了一个逻辑,它似乎部分工作

例如:

在数据库中,如果我有以下产品

 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匹配的单词,您应该仅在搜索字符串具有一定大小(例如三个字符)时执行查询。非常感谢!这正是我想要的。我已经回滚了你的编辑。如果你想删除内容,我建议你使用文章底部的标志链接,并询问版主有哪些选项。