我的Elasticsearch(v5.4.1)文档中有一个_patents
字段,如下所示:
{
// (Other fields : title, text, date, etc.)
,
"_patents": [
{"cc": "US"},
{"cc": "MX"},
{"cc": "KR"},
{"cc": "JP"},
{"cc": "CN"},
{"cc": "CA"},
{"cc": "AU"},
{"cc": "AR"}
]
}
我正在尝试构建一个查询,仅返回专利与国家代码数组匹配的文档。例如,如果我的过滤器是
["US","AU"]
,我需要返回所有具有在US
和AU
中的专利的文档。排除具有US
但没有AU
的文档。
到目前为止,我已经尝试将“term”字段添加到我的当前工作查询中:{
"query": {
"bool": {
"must": [
// (Other conditions here : title match, text match, date range, etc.) These work
,
{
"terms": {
"_patents.cc": [ // I tried just "_patents"
"US",
"AU"
]
}
}
]
}
}
}
或者,作为过滤器:
{
"query": {
"bool": {
"must": [...],
"filter": {
"terms": {
"_patents": [
"US",
"AU"
]
}
}
}
}
}
这些查询和我尝试的变体没有产生错误,但返回了0个结果。
我无法更改我的ES文档模型以便更容易匹配,比如像
"_patents": [ "US","CA", "AU", "CN", "JP" ]
这样的字段。因为这是一个已填充的字段。在索引时,我填充并引用了包含许多字段(包括cc)的专利文档。