gpt4 book ai didi

elasticsearch - 在Elasticsearch中将过滤器和查询whitin嵌套文档组合

转载 作者:行者123 更新时间:2023-12-02 23:35:48 25 4
gpt4 key购买 nike

我正在将Elasticsearch集成到我们正在构建的应用程序中。我遇到嵌套查询和过滤器的麻烦。这是我们映射的示例:

"index": {
"mappings": {
"users": {
"properties": {
"membership": {
"type": "nested",
"properties": {
"membership": {
"type": "string"
},
"start date": {
"type": "date"
},
"end date date": {
"type": "date"
}
}
}
}
}
}
}

现在,我想查找所有具有“成员身份”,“foo bar”且没有结束日期的用户。问题是,当我使用标准分析器时,“foo bar”在索引中分为两个词,因此我不能使用术语过滤器来查找“foo bar”。我们可以使用其他分析器解决此问题,但这还有其他缺点,例如大写/小写问题等。

此外:通过使用查询而不是过滤器来查找具有“foo bar”成员身份的每个人非常容易。问题在于,没有查询可找到“结束日期” =缺少的嵌套文档。为此有一个过滤器,但是我似乎无法在同一嵌套文档中将查询“membership” =“foo bar”与过滤器“end date” = missing组合在一起。

因此,我可以找到每个“结束日期” =丢失的人,并且可以找到每个成员具有“foo bar”成员(member)资格的人,但不是每个没有结束日期的成员都是“foo bar”成员(member)的人。

是否有解决此问题的建议?

最佳答案

这似乎做到了:

POST /test_index/_search
{
"query": {
"nested": {
"path": "membership",
"query": {
"bool": {
"must": [
{
"match": {
"membership.membership": {
"query": "foo bar",
"operator": "and"
}
}
},
{
"filtered": {
"filter": {
"not": {
"filter": {
"exists": {
"field": "membership.end_date"
}
}
}
}
}
}
]
}
}
}
}
}

这是我用来设置它的代码(ES 1.5.1):

http://sense.qbox.io/gist/20a12a71178f0aac4369f52ab0c4c811ba803122

关于elasticsearch - 在Elasticsearch中将过滤器和查询whitin嵌套文档组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255045/

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