我有一个多重匹配搜索查询,我之前根据 client_code 术语过滤器限制了搜索结果。这个效果很好。
我现在需要进一步限制结果,因为某些用户应该只能返回有限零件或产品 ID 的结果。零件/产品 ID 会有所不同,并将通过应用程序逻辑确定。
我正在努力解决的问题如下面的非功能示例所示,是如何为每个索引中的 id 应用术语过滤器。
GET parts,products/_search
{
"size": 20,
"query": {
"bool": {
"must": [],
"filter": [
{
"terms": {
"client_code": [
"abc"
]
}
},
{
"terms": {
"products.id": [
123,456,789
]
}
},
{
"terms": {
"parts.id": [
abc123,abc456,abc789
]
}
},
{
"multi_match": {
"query": "foo",
"fields": [
"_id",
"name",
"sku",
"title",
"barcode"
]
}
}
]
}
}
}
当然,我可以应用这样的术语过滤器:
{
"terms": {
"id": [
123,456,abc789
]
}
}
但是,如果索引之间的 ID 相同(当数据来自自动增量数据库时就会出现这种情况),我需要一种方法来表示“给我产品 id 1,2 和 3 以及零件 id 1,3 和 4”例如。我希望这是有道理的?
任何指点将不胜感激。
如果您给出了数据类型,我可以给出更具体的答案,但根据您提供的内容,您应该看看嵌套查询。
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
有人找到解决方案吗?我有确切的要求。我目前正在研究嵌套查询,但我还没有弄清楚如何使用它。