2016-07-20 26 views
0

請注意,我用ElasticSearch一個完整的新手和我在一個時間緊絀。我有下面的查詢:ElasticSearch - 單人比賽到多個

{ 
    "query": { 
        "filtered": { 
            "query": { 
                "match": { 
                    "state": "VA" 
                } 
            }, 
            "filter": { 
                "and": [ 
                    { 
                        "bool": { 
                            "must": [ 
                                { 
                                    "match": { 
                                        "status": "Active" 
                                    } 
                                } 
                            ] 
                        } 
                    } 
                ] 
            } 
        } 
    }, 
    "sort": [ 
        "dom" 
    ], 
    "size": 1 
} 

目前,代碼庫只支持搜索與特定的一個狀態的項目。我試圖修改它以支持可能的狀態值列表。現在,我已經看到了,其中一個可以使用shouldterms,但兩者的結果都是空的數據集。

我試圖尋找這件事,但我的例子已經看到要麼不工作,或者已經很差解釋(如果有的話)的解決方案,或依賴於閱讀和吸收文檔的頁面(這是我簡單地做沒有時間)。我將如何修改頂部查詢來搜索多個值?

更新

運行以下:

curl -XGET localhost:9200/listings/_mapping/listing/field/state?pretty 

,我已經獲得的映射:

{ 
    "listings" : { 
    "mappings" : { 
     "listing" : { 
     "state" : { 
      "full_name" : "state", 
      "mapping" : { 
      "state" : { 
       "type" : "string" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

更新2

我已經更新d是映射到其設置爲not_analyzed並啓用了store選項。數據已被重新導入。新請求如下所示:

{ 
    "query":{ 
     "filtered":{ 
      "filter":{ 
       "and":[ 
        { 
         "bool":{ 
          "should":[ 
           { 
            "terms":{ 
             "state":["VA","MD"] 
            } 
           } 
          ] 
         } 
        },{ 
         "bool":{ 
          "must":[ 
           { 
            "match":{ 
             "status":"Active" 
            } 
           } 
          ] 
         } 
        } 
       ] 
      } 
     } 
    }, 
    "sort":["dom"], 
    "size":1 
} 
+1

什麼的'state'領域的映射,並提供在這一領域取得了什麼數據樣本。 –

+0

這是一個字符串(兩個字符,大寫),顯然是「分析」。我試過執行一條語句將其改爲'not_analyzed',但它抱怨索引已經存在。 –

+0

是的,如果你想改變映射,你需要重新創建索引。你還沒有提供映射:-)和一個示例文檔。 –

回答

0

您是否嘗試替換「反向工程」查詢的內部「查詢」?

事情是這樣的:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "state": "VA" 
       } 
      }, 
      { 
       "match": { 
       "state": "MD" 
       } 
      } 
      ] 
     } 
     }, 
     "filter": { 
     "and": [ 
      { 
      "bool": { 
       "must": [ 
       { 
        "match": { 
        "status": "Active" 
        } 
       } 
       ] 
      } 
      } 
     ] 
     } 
    } 
    }, 
    "sort": [ 
    "dom" 
    ], 
    "size": 1 
} 

順便說一句,這種查詢是有點亂。你可以重新把它結合在一個「布爾」下的「必須」和「應該」條款。然後,您可以丟棄「過濾」查詢,並使用單一的「布爾」立即下根「查詢」標籤,或丟棄的「過濾」,並僅使用「過濾器」部分「查詢」一節。

+0

我也試過這個,並沒有返回結果集。 –