Mongo/Morphia - $text 查询只需要一个文本索引'

Mongo/Morphia - need exactly one text index for $text query'

我正在尝试使用 Mongo + Morphia 在 class 上创建和使用全文搜索。

我是这样注释的:

@Entity
@Indexes(@Index(fields = @Field(value = "$**", type = IndexType.TEXT)))
public class Product implements Comparable<Product>{

    @Id
    @Expose public ObjectId id;

    @Expose public String name;
    @Expose public String key;
    @Expose public String category;
    @Expose public String brand;
    @Expose public String description;

    @Expose public String department;
    @Expose public String price;
    @Expose public String sex; 
    @Expose public String companyKey;
    @Expose public String url;

...

我正在尝试用这个查询集合:

Datastore ds = Dao.instance().getDatabase();
return ds.createQuery(Product.class).search("mens pants").order("companyKey").asList();

但是我一直收到这个错误:

Query failed with error code 17007 and error message 'Unable to execute query: error processing query: 

planner returned error: need exactly one text index for $text query'

我感觉没有创建索引。为什么会这样?

我最近升级了我的 Mongo 和 Morphia 版本,之前在一些字段上使用了旧标准索引的组合。这会导致一些 'conflict' 或阻止在相同字段上创建新索引吗?

编辑

根据@evanchooly 的建议,查询方法现在如下所示:

public List<Product> textSearch() {

        Datastore ds = Dao.instance().getDatabase();
        ds.ensureIndexes();
        return ds.createQuery(Product.class).search("mens pants").order("companyKey").asList();
    }

您需要 运行 datastore.ensureIndexes() 才能在数据库中实际创建索引。

@evanchooly 在评论中说的是正确的。

问题好像是我之前创建了索引,需要先删除它们。

所以我通过 MongoDB 命令行使用:

db.Product.dropIndexes()

在我更改索引在 Morphia 中的注释方式(以及索引的创建方式)之前执行此操作意味着我得到了我想要的索引。

试图避免这种情况,因为我没有安装 Mongo CLI,但事后看来这是非常有意义的。