我有以下查询,我想查询ID“abc_12-def的索引名称,该名称落在范围过滤器中指定的日期范围内。
但是下面的查询也是获取不同ID的值(例如:abc_12-edf,abc_12-pgf等)并且不在日期范围内。关于如何在这里给出AND条件的任何建议?感谢。
curl -XPOST 'localhost:9200/indexname/status/_search?pretty=1&size=1000000' -d '{
"query": {
"filtered" : {
"filter": [
{ "term": { "ID": "abc_12-def" }},
{ "range": { "Date": { "gte": "2015-10-01T09:12:11", "lte" : "2015-11-18T10:10:13" }}}
]
}
}
}'
答案 0 :(得分:0)
您需要将Bool query用于AND
又名MUST
条件
{
"query": {
"bool": {
"must": [
{
"term": {
"ID": "abc_12-def"
}
},
{
"range": {
"Date": {
"gte": "2015-10-01T09:12:11",
"lte": "2015-11-18T10:10:13"
}
}
}
]
}
}
}
此外,默认情况下所有字段都使用standard analyzer进行分析,这意味着 abc_12-def 被标记为[abc_12,def]。 term query
不会分析字符串。
如果您要查找完全匹配,则应将该字段标记为not_analyzed
。这里解释了如何将其映射为not_analyzed。