gpt4 book ai didi

elasticsearch - 很难结合 bool 和 range 查询, Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 22:10:36 26 4
gpt4 key购买 nike

我在理解在 Elasticsearch 中嵌套查询的各种方法时遇到了一些麻烦。这是我的索引数据的示例。

{
"Underlying" : "Eurodollar",
"Expiration" : "20160315"
},
{
"Underlying" : "Eurodollar",
"Expiration" : "20160415"
},
{
"Underlying" : "Eurodollar",
"Expiration" : "20160515"
}

所以,我能够运行这样的查询
{
"query" : {
"range" : {
"Expiration" : {
"gte" : "20160315",
"lte" : "20160515"
}
}
}
}

正如预期的那样,我得到了所有条目。然而,假设我也有这样的索引条目。
{
"Underlying" : "Something else",
"Expiration" : "20160415"
}

我不希望“别的东西”结果回来,所以我现在尝试做这样的事情。
{
"query" : {
"bool" : {
"must" : [
{
"term" : {
"Underlying" : {
"value" : "eurodollar"
}
}
}
]
},
"range" : {
"Expiration" : {
"gte" : "20160315",
"lte" : "20160515"
}
}
}
}

但我收到一个错误
RequestError(400, u'SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[cCrh939sR7yHdKgawRi6Sw][test-index][0]: SearchParseException[[test-index][0]: query[Expiration:[20160215 TO 20160415]],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"range": {"Expiration": {"gte": "20160215", "lte": "20160415"}}, "bool": {"must": [{"term": {"Underlying": {"value": "eurodollar"}}}]}}}]]]; nested: ElasticsearchParseException[Expected field name but got START_OBJECT "bool"]; }{[cCrh939sR7yHdKgawRi6Sw][test-index][1]: SearchParseException[[test-index][1]: query[Expiration:[20160215 TO 20160415]],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"range": {"Expiration": {"gte": "20160215", "lte": "20160415"}}, "bool": {"must": [{"term": {"Underlying": {"value": "eurodollar"}}}]}}}]]]; nested: ElasticsearchParseException[Expected field name but got START_OBJECT "bool"]; }]', {u'status': 400, u'error': u'SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[cCrh939sR7yHdKgawRi6Sw][test-index][0]: SearchParseException[[test-index][0]: query[Expiration:[20160215 TO 20160415]],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"range": {"Expiration": {"gte": "20160215", "lte": "20160415"}}, "bool": {"must": [{"term": {"Underlying": {"value": "eurodollar"}}}]}}}]]]; nested: ElasticsearchParseException[Expected field name but got START_OBJECT "bool"]; }{[cCrh939sR7yHdKgawRi6Sw][test-index][1]: SearchParseException[[test-index][1]: query[Expiration:[20160215 TO 20160415]],from[-1],size[-1]: Parse Failure [Failed to parse source [{"query": {"range": {"Expiration": {"gte": "20160215", "lte": "20160415"}}, "bool": {"must": [{"term": {"Underlying": {"value": "eurodollar"}}}]}}}]]]; nested: ElasticsearchParseException[Expected field name but got START_OBJECT "bool"]; }]'})

错误最相关的文字似乎是这个
 Expected field name but got START_OBJECT "bool"

我知道我的 bool/term 查询正在运行,因为我只运行了这个
{
"query" : {
"bool" : {
"must" : [
{
"term" : {
"Underlying" : {
"value" : "eurodollar"
}
}
}
]
}
}
}

我得到了预期的结果。

我认为这足以说明我的情况。鉴于我对如何组合它们的猜测不正确,我如何正确组合这些查询。

最佳答案

您的范围查询必须在 must 子句内:

{
"query": {
"bool": {
"must": [
{
"term": {
"Underlying": {
"value": "eurodollar"
}
}
},
{
"range": {
"Expiration": {
"gte": "20160315",
"lte": "20160515"
}
}
}
]
}
}
}
您将不同的查询与 bool 结合使用询问。其中包含 4 个不同的子句: must , should , not_mustfilter . filtermust 相同.差异是过滤器的分数不计算在内。
基本结构是(取自 doc ):
{
"bool": {
"must": {
"term": { "user": "kimchy" }
},
"filter": {
"term": { "tag": "tech" }
},
"must_not": { <= single inside query
"range": {
"age": { "from": 10, "to": 20 }
}
},
"should": [ <= that is an array,
{ <= start of inner query is important
"term": { "tag": "wow" }
},
{
"term": { "tag": "elasticsearch" }
}
]
}
}

关于elasticsearch - 很难结合 bool 和 range 查询, Elasticsearch ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com