2013-08-17 111 views
2

我目前已經存儲在ElasticSearch我與集成測試中產生一個相當簡單的文件:ElasticSearch似乎不支持陣列查找

{ 
    "took" : 1, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "unit-test_project600", 
     "_type" : "recordDefinition505", 
     "_id" : "400", 
     "_score" : 1.0, "_source" : { 
    "field900": "test string", 
    "field901": "500", 
    "field902": "2050-01-01T00:00:00", 
    "field903": [ 
    "Open" 
    ] 
} 
    } ] 
    } 
} 

我想過濾用於特異性field903和值「打開「,因此我執行以下查詢:

{ 
    query: { 
     filtered: { 
      filter: { 
       term: { 
        field903: "Open", 
       } 
      } 
     } 
    } 
} 

這不會返回任何結果。不過,我可以與其他領域的使用,它將返回記錄:

{ 
    query: { 
     filtered: { 
      filter: { 
       term: { 
        field901: "500", 
       } 
      } 
     } 
    } 
} 

這樣看來,我無法在ElasticSearch陣列搜索。我已經閱讀了幾個有類似問題的人的例子,但他們都沒有解決它。當然,這不是ElasticSearch的限制嗎?

我認爲這可能是一個映射問題。這裏是我的映射:

{ 
    "unit-test_project600" : { 
    "recordDefinition505" : { 
     "properties" : { 
     "field900" : { 
      "type" : "string" 
     }, 
     "field901" : { 
      "type" : "string" 
     }, 
     "field902" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
     }, 
     "field903" : { 
      "type" : "string" 
     } 
     } 
    } 
    } 
} 

然而,ElasticSearch docs表明,有一個字符串或數組映射之間沒有區別,所以我不認爲我需要在這裏做任何改變。

+0

在數組中搜索沒有問題,這是別的。 – ramseykhalaf

+0

也請告訴我這些不是字段名稱!名字應該告訴你關於這個領域的一些事情,一個新的開發人員如何能夠理解這一點? – ramseykhalaf

+0

@ramseykhalaf:我以爲有人會這麼說。這些字段實際上是從數據庫生成的自定義字段名稱,因爲軟件的用戶可以自定義存儲的字段。開發人員不會寫這個查詢;該查詢將由軟件自動生成。我想你可能會爭辯說,我們可能會以某種方式爲該字段生成一個包含主鍵和字段名的字段,但我並不認爲這是必要的,並且可能是脆弱的。 –

回答

5

嘗試搜索「打開」而不是「打開」。默認情況下,Elasticsearch在索引字段時使用標準分析器。標準分析儀使用小寫字母過濾器,如示例here中所述。根據我的經驗,Elasticsearch可以搜索數組。

+2

是的,我認爲分析可能是罪魁禍首!想想這個領域將持有什麼。如果它是自由文本,則將其保留爲分析字符串並使用「匹配」查詢(而不是「term」)。如果它是一個枚舉類型的文件,例如:open/closed/pending ...,那麼使用'「index」:「not_analyzed」'並確保**您使用'term'過濾器。 – ramseykhalaf

+0

啊,我沒有意識到這一點。你確實是正確的斯科特!感謝您提請我注意這一點。 –

相關問題