【发布时间】:2020-09-11 07:42:21
【问题描述】:
我有多个查询,我希望按查询顺序过滤结果。
例如,我想从查询 1 结果中搜索查询 2,从查询 2 结果中搜索查询 3。 查询 3 结果不应超出查询 1 结果。
查询3 ⊆ 查询2 ⊆ 查询1
| id | document | category | group |
| -------- | ----- | --- | --- |
| 1 | I want better search | fruit | 1 |
| 2 | I want to watch search movie | fruit | 2 |
| 3 | search movie | animal | 1 |
query1 = Q("match", group="1")
query2 = Q("match", category="fruit")
query3 = Q("match", document="search")
我想要的只是结果中的文档 1。
似乎bool函数会给每个查询赋予相等的权重,例如它会给query3完全匹配的结果,query1没有完全匹配或相关性低,这不是query3 ⊆ query2 ⊆的顺序查询1。
这是我的代码:
resp = es.search(index='test-vector-index', body={
"query" : {
"bool": {
"must": [
{ "match" : { "group" : "1" }},
{ "match": { "category": "fruit" } },
{ "match": { "document": "search" } },
]
}
}
}
)
它们的工作方式与我想的不一样,请帮我解决这个问题。
谢谢。
【问题讨论】:
-
最好以 JSON 格式提供您的索引映射、示例文档和预期文档,以便其他 SO 用户可以轻松重现问题并为您提供帮助。
标签: elasticsearch