我正在尝试查询弹性搜索集群。
索引名称为titles
,_ type为title
。当我将类型输入请求URL时,过滤将按预期进行:
POST http://esendpoint.com/titles/title/_search?
身体:
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{ "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
]
}
}
}
}
但是,如果我在查询正文中而不是在URL中添加_type标题,则所有结果均在索引titles
下。但是在URL中使用时,我只能从title
POST http://esendpoint.com/titles/_search
身体:
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{ "term" : {"_type" : "title"}},
{ "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
]
}
}
}
}
我无法理解为什么会这样。
答案 0 :(得分:0)
您需要使用filter
(与)而不是should
(或):
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"_type": "title"
}
},
{
"term": {
"_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
}
}
]
}
}
}
}
}
以下查询适用于ES 2和更高版本:
{
"query": {
"bool": {
"filter": [
{
"term": {
"_type": "title"
}
},
{
"term": {
"_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
}
}
]
}
}
}