gpt4 book ai didi

elasticsearch - 如何在ElasticSearch中组合多个查询

转载 作者:行者123 更新时间:2023-12-03 02:28:42 24 4
gpt4 key购买 nike

我在尝试正确组合 Elasticsearch 查询时遇到问题,在SQL中,我的查询看起来像这样:

Select * from ABPs where (PId = 10 and PUId = 1130) or (PId = 30 and PUId = 2000) or (PlayerID = '12345')

我可以自己实现每个目标,并获得正确的结果。

查询A)(PId = 10和PUId = 1130)
转换为
{
"query": {
"bool": {
"must": [
{
"term": {
"PId": "1366"
}
},
{
"term": {
"PUId": "10"
}
}
]
}
}
}

查询B)(PId = 10和PUId = 1130)
与上面的翻译相同,只是值不同

查询C)(PlayerID ='12345')
转换为
{
"query": {
"match": {
"PlayerUuid": "62fe0832-7881-477c-88bb-9cbccdbfb3c3"
}
}
}

我一直在试图找出如何将所有这些都纳入同一个ES搜索查询中,而我却一点运气都没有,只是希望拥有更丰富ES经验的人能够帮上忙。

最佳答案

您可以使用should(逻辑或)和must(逻辑与)子句来使用Bool query

以下是子句Select * from ABPs where (PId = 10 and PUId = 1130) or (PId = 30 and PUId = 2000) or (PlayerID = '12345')的ES查询表示形式

POST <your_index_name>/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"PId": "10"
}
},
{
"term": {
"PUId": {
"value": "1130"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"PId": "30"
}
},
{
"term": {
"PUId": "2000"
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"PlayerId": "12345"
}
}
]
}
}
]
}
}
}

请注意,我假设字段PId,PUId和PlayerId均为 keyword类型。

关于elasticsearch - 如何在ElasticSearch中组合多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60480747/

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