我想获取其特定字段包含一个列表中的所有项目而不包含另一列表中的任何项目的文档。
例如:
该文档可能如下所示:
{
"name" : "text",
"number" : "1.0",
"price" : "3.99"
}
我有一个字符串列表,必须在“名称”字段中。has_to_be = [element1, element2, ...]
我有一个不能在“名称”字段中的字符串列表。cannot_be = [element1, element2, ...]
我想获取文档,其字段“名称”包含has_to_be中的所有字符串,不包含cannot_be中的任何单词。我尝试过这样的事情:
"query":
{"bool":
{"must": [
{"match": {"name": "element1"}},
{"match": {"name": "element2"}}
]}}
但是我没有任何成功。我也尝试了以下查询:
GET /index_name/_search?q=name:+element1 +element2
(另一个问题:如何将这样的查询从python发送到elasticsearch?)但是我也得到了点击,其中没有包含所有元素(element1或element2)。
最佳答案
关于过滤器需求,您可以使用 bool(boolean) 查询执行所需的操作并指定匹配的运算符。
我使用了一些测试文档:
POST test/_doc
{
"elt": ["test1", "test2", "test3"]
}
POST test/_doc
{
"elt": ["test1", "test2", "test3", "test4"]
}
POST test/_doc
{
"elt": ["test1", "test2"]
}
在下面的示例查询中,文档必须包含test1 AND test2 AND test3 but NOT test 4
。因此,第一个文档将是唯一匹配的文档。
GET test/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"elt": {
"query": "test1 test2 test3",
"operator": "AND"
}
}
}
],
"must_not": [
{
"match": {
"elt": {
"query": "test4 test5",
"operator": "OR"
}
}
}
]
}
}
}
关于python - 如何搜索其特定字段包含一个列表中的所有项目而不包含另一列表中的任何项目的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64553565/