如何用Spring Data MongoDB注解创建指定默认语言的通配符文本索引?
解决Spring Data MongoDB注解创建指定默认语言的通配符文本索引问题
你遇到的问题根源是错误地将索引选项(如default_language)放到了@CompoundIndex的def属性中——这个属性仅用于定义索引的键结构,而索引配置选项需要单独通过options属性来指定。
在Spring Data MongoDB 2.3.7版本中,@CompoundIndex提供了options参数,专门用来传递创建索引时的配置选项(比如默认语言、权重等)。你可以按以下方式修正你的模型类:
@Document(collection = "events") @CompoundIndexes({ @CompoundIndex( name = "fulltext", def = "{'$**': 'text'}", options = "{'default_language': 'german'}" ) }) public class Event { public Event() { } protected String name; // 其他字段定义... }
为什么之前的写法不生效?
你之前把键定义和选项合并到def中的写法,Spring Data只会解析第一个JSON对象(即{'$**':'text'})作为索引的键结构,第二个对象会被忽略,导致default_language配置没有被传递给MongoDB。而单独使用options属性后,Spring Data会将键定义和选项组合成完整的创建索引命令,效果和你在Mongo Shell中执行的db.events.createIndex({'$**':'text'},{default_language: "german"})完全一致。
这样修改后,Spring Data会自动创建带有德语默认语言的通配符文本索引,无需编写额外的编程式索引代码。
内容的提问来源于stack exchange,提问作者Paul K.
相关产品推荐
相关产品推荐

