将Elasticsearch与手动路由一起使用时(在索引文档时直接在http查询中提供路由值),如果路由值中存在通配符,我会尝试使用其ID检索文档。
例如,如果我使用此查询(myRouting
作为路由值)将ID为“Arya”的文档编入索引,请注意大写字符:
curl -XPOST 'http://elasticsearch:9200/xxxx/yyyy/Arya?routing=myRouting' -d @dataset/arya_simple.json
当我尝试查询群集时,使用通配符作为路由值,不返回任何文档:
curl -XGET 'http://elasticsearch:9200/xxxx/yyyy/Arya?routing=*'
答案是{"_index":"xxxx","_type":"yyyy","_id":"Arya","found":false}
另一方面,如果我使用其中没有大写字符的路由值(myrouting
作为路由值,则不使用大写字符):
curl -XPOST 'http://elasticsearch:9200/xxxx/yyyy/Arya?routing=myrouting' -d @dataset/arya_simple.json
(myrouting
代替myRouting
)
它有效,和我刚才做的GET请求一样,给了我文件:
curl -XGET 'http://elasticsearch:9200/xxxx/yyyy/Arya?routing=*'
{"_index":"xxxx","_type":"yyyy","_id":"Arya","_version":1,"found":true,"_source":{ ... .... }}
您是否知道为什么通配符仅在路由值中没有大写时才起作用?
如果我在执行GET时提供*Routing
作为路由值,我也会获得该文档。
似乎通配符停在第一个大写的字符......