我正在尝试使用布尔过滤器执行查询,但似乎在类型为字符串时它不起作用。
示例:
当我将此有效负载发送到我的_search端点时:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{ "term": { "level" : 3 } },
{ "term": { "id" : 4 } }
]
}
}
}
}
}
结果是:
{
"took": 29,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "app",
"_type": "reviewable",
"_id": "4",
"_score": 1,
"_source": {
"id": 4,
"name": "Hololens Bootcamp Experience",
"providers": [],
"gender": [],
"duration": "3",
"category": "COURSE",
"themes": [],
"baseThemes": [],
"budget": "1000+",
"language": "EN",
"level": "3",
"region": "NL_BR",
"subscribemethod": "2",
"kind": "2"
}
}
]
}
}
然后当我尝试用这样的语言术语过滤它时:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{ "term": { "level" : 3 } },
{ "term": { "id" : 4 } },
{ "term": { "language" : "EN" } }
]
}
}
}
}
}
我的结果有0次点击:
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
这对我来说似乎很奇怪,因为你可以在我的第一个结果中看到过滤器应该匹配我的数据。
我有搜索,一篇文章提到我可能没有索引的所有内容。但据我所知,我当然有。有什么想法吗?
答案 0 :(得分:0)
您的语言字段很可能是一个已分析的字符串,因此EN
被标记化并编入索引为en
,因此您的查询应该是这样的:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{ "term": { "level" : 3 } },
{ "term": { "id" : 4 } },
{ "term": { "language" : "en" } } <--- lowercase here
]
}
}
}
}
}
另一种方法是使用match
查询,但不包含对您的情况无用的包装filtered
查询:
{
"query": {
"bool": {
"must": [
{ "term": { "level" : 3 } },
{ "term": { "id" : 4 } },
{ "match": { "language" : "EN" } }
]
}
}
}