[英]Elasticsearch: How to query an array field using OR condition?
我有一些ElasticSearch文檔,其中包含一個Array字段。
我希望能夠搜索整個索引
要查找首先包含數組字段的文檔,
如果有,請查找包含要搜索的值的那些文檔。
以下是我的數據-
{
"took" : 633,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "demo",
"_type" : "1",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "anon",
"nick_name" : "an",
"hobbies" : [
"reading",
"writing"
]
}
},
{
"_index" : "demo",
"_type" : "1",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "anon2",
"nick_name" : "an2",
"hobbies" : [
"playing",
"studying"
]
}
},
{
"_index" : "demo",
"_type" : "1",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "anon3",
"nick_name" : "an3",
"hobbies" : [
"playing",
"writing"
]
}
},
{
"_index" : "demo",
"_type" : "1",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "anon4",
"nick_name" : "an4"
}
}
]
}
}
我想獲取那些其興趣愛好數組包含“正在播放”或“正在學習”值的文檔
即。 文件2和3
以下是我的數據創建查詢-
POST /demo/_doc/1
{
"name":"anon",
"nick_name":"an",
"hobbies":["reading","writing"]
}
POST /demo/_doc/2
{
"name":"anon2",
"nick_name":"an2",
"hobbies":["playing","studying"]
}
POST /demo/_doc/3
{
"name":"anon3",
"nick_name":"an3",
"hobbies":["playing","writing"]
}
POST /demo/_doc/4
{
"name":"anon4",
"nick_name":"an4"
}
GET demo/_search
{
"query": {
"match_all": {}
}
}
以下查詢可以讓我進行一次搜索,但是如何實現“或”條件?
GET demo/_search
{
"query": {
"match": {
"hobbies": "playing"
}
}
}
我現在無法測試,但是可能是這樣的:
GET demo/_search
{
"query": {
"bool": {
"should": [
{
"terms": {
"hobbies": [
"playing",
"studying"
]
}
}
]
}
}
}
如果您的hobbies
字段的類型為keyword
。
編輯:按照文檔中的示例進行操作,可能會更加容易:
GET demo/_search
{
"query" : {
"terms" : {
"hobbies" : ["playing", "studying"]
}
}
}
我可以使用以下es查詢解決此問題-
GET demo/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"hobbies": "playing"
}
},
{
"match": {
"hobbies": "studying"
}
}
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.