2

定义复合索引时,例如

create table temptable (id integer, id2 integer, name string, INDEX ci using plain(id2, id));

id 和 id2 在 elasticsearch 中使用整数进行索引,但我从 ES 的 _mapping 中看到的是:

      "ci" : {
        "type" : "string",
        "analyzer" : "standard"
      },

其中 id 和 id2 都被复制到类型为“string”的 ci 中。

您能否对此进行更多解释(例如保留的顺序),并且可能对 crate 数据中的整个复合索引进行更多解释?

4

1 回答 1

2

您通过这样做发现了 2 个错误,我们将尽快修复。;)

首先,使用普通索引类型应该导致“关键字”分析器而不是“标准”分析器。

其次,超过 2 个非字符串列的组合不应导致字符串类型的列,但如果支持,则与原始列的类型相同。我写了“如果支持”,因为目前我们禁止在非字符串列上定义复合索引,因为我们不知道这将是什么。
我们当前的match函数实现只支持字符串文字,所以这个函数不能用于查询复合索引。
你能解释一下你的用例吗?
也许在 github 上创建一个问题对于这种可能的增强是有意义的。

用于定义复合索引的列的顺序根本无关紧要,如果是字符串,则分析两者的值,并将结果项插入/合并到目标字段。

感谢您的报告!

于 2014-07-29T13:14:15.743 回答