2017-06-16 95 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」只能用小寫。 –