我正在分析文本。这些文本有注释(例如“章节”、“风景”……)。这些注释在我的 MongoDB 集合annotations
中,例如
{
start: 1,
stop: 10000,
type: chapter,
details: {
number: 1,
title: "Where it all began"
}
},
{
start: 10001,
stop: 20000,
type: chapter,
details: {
number: 2,
title: "Lovers"
}
},
{
start: 1,
stop: 5000,
type: scenery,
details: {
descr: "castle"
}
},
{
start: 5001,
stop: 15000,
type: scenery,
details: {
descr: "forest"
}
}
挑战 1:对于文本中的给定位置,我想找到所有注释。例如查询字符1234
应该告诉我,
- 它在第一章内
- 它发生在城堡里
挑战 2:我也喜欢查询范围。例如查询字符形式9800 to 10101
应该告诉我,它触及chapter 1
,chapter 2
并且scenery forest
.
挑战 3:与挑战 2类似我只想匹配那些完全被查询范围覆盖的注释。例如查询字符形式9800 to 30000
应该只返回文档chapter 2
。
对于挑战 1,我尝试简单地使用$lt
and $gt
。例如:
db.annotations.find({start: {$lt: 1234}, stop: {$gt: 1234}});
但我意识到,start
即使我有 and 的复合索引,也只使用start
键的索引stop
。有没有办法为我提到的三个问题创建更充分的索引?
我很快想到了地理空间索引,但我还没有使用它们。我也只需要它的一维版本。