2017-06-16 171 views
-1

我Elasticsearch(V5.4.1)文件有_patents场这样:Elasticsearch匹配的字符串数组

{ 
    // (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"]我需要退回在USAU中拥有专利的所有文档。排除具有US但不是AU的文档。

到目前为止,我已经试图在“术语”字段添加到我的当前工作查询:

{ 
    "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

我找到了解决方案。过滤后的国名必须小写 ...

"US"没有返回结果,但"us"作品,尽管索引字段是"US" ......淡淡的-_-”

我也有书面查询是这样的:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "_patents.cc": "us" 
      } 
     }, 
     { 
      "term": { 
      "_patents.cc": "ca" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

test'r [\'$ {egroup} | $ {e.age}'''' –

2

这适用于大写和小写都..

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "_patents.cc": "au" 
      } 
     }, 
     { 
      "match": { 
      "_patents.cc": "us" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

很酷,没错,谢谢:)我不知道“term”只能用小写。 –