【发布时间】:2019-09-02 13:58:51
【问题描述】:
我是 Elasticsearch 的新手,我正在尝试编写一些查询,但碰巧不起作用。我有有关人员的信息,我想根据某些属性查询人员。
这是 Elasticsearch 中映射的一部分:
"properties": {
"doc": {
...
"languages": [{
"language": {
"type": "text",
"null_value": "NULL"
},
"level": {
"type": "integer",
"null_value": "NULL"
}
}],
...
}
}
例如,我想过滤掉所有说 English 级别大于 3 和 Japanese 级别大于2。
我已经尝试过的是这种方法没有给出预期的结果。
"size": 1000,
"from": 0,
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{"match": {"languages.language": "english"}},
{"range": {"languages.search_value": {"gt": 3}}}
]
}
},
{
"bool": {
"must": [
{"match": {"languages.language": "japanese"}},
{"range": {"languages.search_value": {"gt": 2}}}
]
}
}
]
}
}
上述查询返回所有会说英语和日语的人,但语言的级别不匹配。有些人说英语 4 级(可以),但日语 1 级(不行)和德语 5 级。我想问题是,而不是只为指定的语言寻找想要的水平,我的查询会查找人们使用的所有口语的级别。
所以,我期望从查询中得到的结果是让所有说英语的人达到 4 或 5 级,日语达到 3、4 或 5 级(两者同时进行强>)。我不在乎他们说的其他语言和他们的水平。
欢迎任何帮助或想法如何解决这个问题。
【问题讨论】:
标签: elasticsearch kibana elasticsearch-query