我的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" ]
,因为这是一个填充的字段。在索引时,我填充并引用包含Patent
字段的cc
个文档。
答案 0 :(得分:3)
这适用于大写和小写两种..
{
"query": {
"bool": {
"must": [
{
"match": {
"_patents.cc": "au"
}
},
{
"match": {
"_patents.cc": "us"
}
}
]
}
}
}
答案 1 :(得分:1)
我找到了解决方案。已过滤的国家/地区名称必须为小写 ...
function search(){
$this->dashboard();
$data['searches'] =array();
if ($query = $this->users_model->user_search($this->input->post('search')))
{
$data['searches'] = $query;
}
$this->load->view('dashboard', $data);
}
不会返回任何结果,但"US"
仍有效,尽管索引字段为"us"
...... Faint -_-'
我也用这种方式编写了查询:
"US"
答案 2 :(得分:0)
我的elasticsearch版本是6.0.1。我正在使用这种方法:
GET <your index>/_search
{
"query": {
"bool": {
"must": [{
"query_string": {
"query": "cc:us OR cc:ca"
}
}]
}
}
}