如何在elasticsearch中搜索单个值
How to search single value in elasticsearch
我在 elasticsearch 中有 2 个文档:
{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}
然后我这样查询:
{
"query": {
"bool": {
"must": [{
"term": {
"a": "123"
}
}]
}
}
}
这是我得到的:
{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}
我知道 elasticsearch 原生支持多值字段,所以它们都被显示了。
但我只想要第一个条目,它的id是“1”:
{"_id": "1", "a": "123"}
如何实现?
使用脚本
您可以使用脚本来 return 数组大小为 1 的文档。如果不存在具有单个值的文档,则 "will not" return 具有多个值的文档。无法获得下一个最小尺寸匹配文档。这必须在客户端处理
{
"query": {
"bool": {
"must": [
{
"term": {
"a": "123"
}
},
{
"script": {
"script": "if(doc['a.keyword'].size()==1) return true;"
}
}
]
}
}
}
我在 elasticsearch 中有 2 个文档:
{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}
然后我这样查询:
{
"query": {
"bool": {
"must": [{
"term": {
"a": "123"
}
}]
}
}
}
这是我得到的:
{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}
我知道 elasticsearch 原生支持多值字段,所以它们都被显示了。 但我只想要第一个条目,它的id是“1”:
{"_id": "1", "a": "123"}
如何实现?
使用脚本
您可以使用脚本来 return 数组大小为 1 的文档。如果不存在具有单个值的文档,则 "will not" return 具有多个值的文档。无法获得下一个最小尺寸匹配文档。这必须在客户端处理
{
"query": {
"bool": {
"must": [
{
"term": {
"a": "123"
}
},
{
"script": {
"script": "if(doc['a.keyword'].size()==1) return true;"
}
}
]
}
}
}