我有一个gender可以具有三个值的字段:
的映射为gender:
"gender": {
"type": "string",
"index": "not_analyzed"
}
Run Code Online (Sandbox Code Playgroud)
为了匹配null我正在关注这个。
我使用此查询来获取gender文档null:
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "gender"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想构建一个should查询,以便搜索结果可以返回具有该gender字段的任何文档:
{
"query": {
"bool": {
"should": {
"bool": {
"should": [
{
"match": {
"gender": {
"query": "MALE",
"type": "boolean"
}
}
},
{
"match": {
"gender": {
"query": "FEMALE",
"type": "boolean"
}
}
}
],
"must_not": {
"exists": {
"field": "gender"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的查询给了我 0 次点击。我应该如何为此构建正确的查询?
{
"query": {
"bool": {
"should": [
{
"match": {
"gender": {
"query": "MALE",
"type": "boolean"
}
}
},
{
"match": {
"gender": {
"query": "FEMALE",
"type": "boolean"
}
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "gender"
}
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果我不太理解这个问题,而事实上你想区分gender 文档中完全缺失的内容或存在的字段,但有null,您需要其他东西,这需要稍微更改映射:
"gender": {
"type": "string",
"index": "not_analyzed",
"null_value": "_null_"
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,查询是:
"query": {
"bool": {
"should": [
{
"match": {
"gender": {
"query": "MALE"
}
}
},
{
"match": {
"gender": {
"query": "FEMALE"
}
}
},
{
"term": {
"gender": "_null_"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您索引:
{"index":{}}
{"gender":"MALE"}
{"index":{}}
{"gender":"FEMALE"}
{"index":{}}
{"gender":null}
{"index":{}}
{"gender2":"MALE"}
{"index":{}}
{"gender":"whatever"}
Run Code Online (Sandbox Code Playgroud)
它会给你回馈:
{
"_score": 0.2826735,
"_source": {
"gender": "MALE"
}
},
{
"_score": 0.2826735,
"_source": {
"gender": null
}
},
{
"_score": 0.021688733,
"_source": {
"gender": "FEMALE"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5532 次 |
| 最近记录: |