gpt4 book ai didi

elasticsearch - 弹性匹配文档,包含数组中的所有值

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

我有像Elastic中的那些文件。每个文档都有一些信息以及访问该文档的所有强制权限。
查询时,我想传递所有用户权限并接收匹配的文档,但查询遇到困难。
文件:

{
"id": 1,
"permissions": ["a", "d"]
}
{
"id": 2,
"permissions": ["a"]
}
{
"id": 3,
"permissions": ["a", "b"]
}
{
"id": 4,
"permissions": ["a", "c"]
}
这是我最近得到的:
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"tags.keyword": "a"
}
},
{
"match_phrase": {
"tags.keyword": "b"
}
},
],
"minimum_should_match": doc.tags.length
}
}
}
// Result are documents with id's 2 and 3.
我尝试用 "minimum_should_match"扩展 "script",但是没有成功(显然它不支持它):
"script" : {
"script" : {
"inline": "doc['permissions'].length",
"lang": "painless"
}
}
在上面的示例中,使用传递的权限数组 ["a", "b", "c"],输出应该是id为2、3和4的文档。 ["a"]仅匹配id为2的文档。
编辑:附加信息
一个文档以及用户最多具有5个权限,但是权限集非常大(500多个),因此我正在搜索通用查询。数据也可以转换。
我正在使用Elastic 7.6
任何帮助表示赞赏!

最佳答案

没有有效的方法来达到预期的结果,但是除了下面的搜索查询之外,您甚至可以使用脚本来获得结果,请引用SO answer以了解这一点。
您可以使用Terms Query返回在提供的字段中包含一个或多个确切术语的文档。
添加一个工作示例,其中包含索引数据(与上述问题相同),索引映射,搜索查询和搜索结果。
索引映射:

{
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"permissions": {
"type": "text"
}
}
}
}
搜索查询:
 {
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"terms": {
"permissions": [
"a",
"b",
"c"
]
}
}
],
"must_not": [
{
"terms": {
"permissions": [
"d"
]
}
}
]
}
}
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64081578",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"id": 2,
"permissions": [
"a"
]
}
},
{
"_index": "stof_64081578",
"_type": "_doc",
"_id": "3",
"_score": 1.0,
"_source": {
"id": 3,
"permissions": [
"a",
"b"
]
}
},
{
"_index": "stof_64081578",
"_type": "_doc",
"_id": "4",
"_score": 1.0,
"_source": {
"id": 4,
"permissions": [
"a",
"c"
]
}
}
]

关于elasticsearch - 弹性匹配文档,包含数组中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64081578/

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