定义复合索引时,例如
create table temptable (id integer, id2 integer, name string, INDEX ci using plain(id2, id));
id和id2在elasticsearch中使用integer索引,但是我从ES的_mapping中看到的是:
"ci" : {
"type" : "string",
"analyzer" : "standard"
},
其中id和id2都以"string"类型复制到ci。
你能解释一下这个吗(比如保存的顺序),或者再解释一下crate数据中的复合索引吗?
你发现了2个bug,我们会尽快修复。;)
首先,使用普通索引类型应该导致"关键字"分析器而不是"标准"分析器。
第二,超过2个非字符串列的组合不应该产生字符串类型的列,但如果支持,则应该是与原始列相同类型的列。我写"if supported"是因为目前,我们不允许在非字符串列上定义复合索引,因为我们不知道这是为了什么。
我们目前的match
函数实现只支持字符串字面值,所以这个函数不能用于查询复合索引。
您能解释一下您的用例吗?
也许在github上创建一个问题对于这种可能的增强是有意义的。
用于定义复合索引的列的顺序根本不重要,如果是字符串,将分析两个列的值,并将结果项插入/合并到目标字段。
谢谢你的报告!