Lucene elasticsearch是否有复合索引?
我想知道elasticsearch是否需要预先定义复合索引。所谓复合索引,我指的是mongodb所拥有的东西 ensureIndex({field1:1,field2:1,field3:1}) 或者类似mysql db的功能 在mytable上创建索引adhoc_索引(字段1、字段2、字段3) 因此,我所处理的数据非常简单(大部分只是csv格式)。(为了完整性)如下所示 字段1,字段2,…,字段n 字段的数量是任意的。一个数据集可能有10个字段,另外20个字段,另外1000个字段。我基本上将每一行转换成一个JSON文档,如下所示Lucene elasticsearch是否有复合索引?,lucene,elasticsearch,Lucene,elasticsearch,我想知道elasticsearch是否需要预先定义复合索引。所谓复合索引,我指的是mongodb所拥有的东西 ensureIndex({field1:1,field2:1,field3:1}) 或者类似mysql db的功能 在mytable上创建索引adhoc_索引(字段1、字段2、字段3) 因此,我所处理的数据非常简单(大部分只是csv格式)。(为了完整性)如下所示 字段1,字段2,…,字段n 字段的数量是任意的。一个数据集可能有10个字段,另外20个字段,另外1000个字段。我基本上将每一
{
"field1" : "value1",
"field2" : "value2",
...
"fieldN" : "valueN"
}
将A、B和C表示为字段的三个相互排斥的子集:{field1、field2、…、fieldN}。在任何给定的时间,我都必须构建一个动态查询来过滤a=a、B=B和C=C的记录
比如说,
- A={field1},B={field2,field3},C={field6}
- A={field2},B={field1},C={field1000,field50}
我是否只是通过弹性搜索从盒子中取出这个复合索引功能?也就是说,我甚至不必接触索引映射文件/定义 ElasticSearch没有复合索引,但它在查询多个索引并将它们相交(相交位向量FTW)时非常有效 大多数情况下,不需要复合索引,即使对于您提到的查询4个不同字段的情况也是如此。ElasticSearch将愉快地查询4个不同的索引,然后高效地将结果相交。根据我的经验,在类似的情况下,它的性能与MongoDB相当,甚至超过了MongoDB
如果你必须有一个复合索引,你可以考虑索引一个辅助字段,它的值是你想要索引的值的组合。 你能解释一下复合指数到底允许你做什么吗?抱歉,我可能遗漏了一些内容…复合索引/索引允许您更快地查询/搜索。我不知道确切的内部工作/实现,但我认为它们看起来像一个倒排索引。在倒排索引中,键是术语,值是出现术语的文档列表。因此,复合索引可能有多个项作为键。但在mysql这样的系统中,术语的顺序很重要。例如,这个复合索引(field1,field2)不同于(field2,field1),因为它影响WHERE子句。至少对于mysql和mongodb,他们说你需要指定它。顺便说一下,在信息检索中,我也听说过“复合索引”被称为“复合索引”
"bool" : {
"must" : [
{"term" : { "field1" : "val1" },
{"term" : { "field2" : "val2" },
{"term" : { "field3" : "val3" },
{"term" : { "field4" : "val4" }
]
}