我正在尝试通过标签使用Elasticsearch搜索食谱
{
...
"tag": [
"cool",
"cooler"
]
},
{
...
"tag": [
"cool",
"hard"
]
},
{
...
"tag": [
"coolest",
"hardest"
]
},
我要搜索所有包含“酷”标签的实体
我尝试了什么:
GET /recipes/_search
{
"query": {
"terms": {
"tag": ["cool"]
}
}
}
什么也没退
GET /recipes/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"tag": "cool"
}
}
]
}
}
}
什么也没退
GET /recipes/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"tag": "cool"
}
}
]
}
}
}
返回所有实体
我如何只检索确实包含“ cool”以及可能包含其他值的项目,但规则是标签必须存在于标签数组中
答案 0 :(得分:0)
GET /recipes/_search
{
"query": {
"bool":{
"should":[
{"wildcard" : { "tag" : "cool*" } }
]
}
}
答案 1 :(得分:0)
此解决方案使用脚本查询script query
GET /recipes/_search
{
"query": {
"bool": {
"must": {
"script": {
"script": {
"source": "doc['tag'] instanceof List && doc['tag'][0].contains('cool')"
}
}
}
}
}
}