我仍然对ElasticSearch很新,但我现在正试图解决为什么我也无法将通配符查询与匹配混合起来。
以此JSON主体为例
{
"size":"10",
"from":0,
"index":"example",
"type":"logs",
"body":{
"query":{
"match":{
"account":"1234"
},
"wildcard":{
"_all":"*test*"
}
},
"sort":{
"timestamp":{
"order":"desc"
}
}
}
}
返回错误" SearchPhaseExecutionException [无法执行阶段[查询],所有分片都失败; " (完全转储:http://pastebin.com/uJJZm8fQ)
但是,如果我从请求正文中删除通配符或匹配键 - 它会按预期返回结果。 我一直在阅读文档,但我根本找不到任何相关内容。 起初我认为它与_all参数有关,但即使我明确指定了一个键,也会出现相同的结果。
在我假设我应该使用' bool'运算符,或类似的东西混合我的查询类型,有什么解释吗?
答案 0 :(得分:1)
例外说它不理解字段“索引”。查询Elasticsearch时,请在URL中包含索引名称和类型。 match
查询中没有通配符搜索。 query_string
查询中存在通配符搜索。
match
POST /example/logs/_search
{
"size": 10,
"from": 0,
"query" : {
"match": {
"account": "1234"
}
},
"sort": {
"timestamp" : {
"order": "desc"
}
}
或类似query_string
:
POST /example/logs/_search
{
"size": 10,
"from": 0,
"query" : {
"query_string": {
"default_field": "account",
"query": "*1234*"
}
},
"sort": {
"timestamp" : {
"order": "desc"
}
}
编辑:添加wildcard
查询的示例:
POST /example/logs/_search
{
"size": 10,
"from": 0,
"query" : {
"wildcard": "*test*"
},
"sort": {
"timestamp" : {
"order": "desc"
}
}