2013-07-26 94 views
0

我想創建一些報告過濾器,用戶可以使用報告上的任何字段搜索配置文件。例如:搜索與viElasticsearch - 使用布爾(必須&與)DSL查詢創建報告過濾器

這裏開始,隨着ann開始,gradefirstname任何配置文件是迄今爲止我所書寫的查詢:

{ 
    from: 20, 
    size: 20, 
    query: { 
     filtered: { 
      query: { 
       match_all: [ ] 
      }, 
      filter: { 
       bool: { 
        must: [ 
         { 
          prefix: { 
           firstname: "ann" 
          } 
         }, 
         { 
          prefix: { 
           grade: "vi" 
          } 
         } 
        ] 
       } 
      } 
     } 
    }, 
    sort: { 
     grade: { 
      order: "asc" 
     } 
    } 
} 

如果我刪除的must一個孩子(在bool過濾器),它的工作原理。但是,一旦我使用了多個過濾器,它就不會返回任何結果,並且我需要能夠在其中使用任意數量的條目。

此外,如果我使用should而不是must,它的工作原理。我不知道是否我誤解了邏輯,但根據我的理解(在這種情況下)must應返回firstname的結果和grade開頭的結果vi

它們確實存在,但此查詢只是找不到它們。

我在這裏錯過了什麼嗎?

感謝

+2

查詢看起來很好,和你的應該是如何工作的理解是正確因此,它可能是一些與您的映射或字段名,或嘗試創建一個使用示例文檔和查詢來破解的最小示例,一個空索引和兩個curl命令應該能夠確認您的查詢沒有任何問題 –

回答

2

因爲,我不能發表評論。我正在回答一些假設。

首先,我使用ES 0.90.2 version,您的查詢對我的輸入正常工作。但是,根據您輸入的大小和您執行查詢的平臺,我的答案可能不是正確的答案。

假設:索引數據的數量少於20

我添加了以下投入到我的索引:

'{"name": "ann", "grade": "vi"}' 
'{"name": "ann", "grade": "ii"}' 
'{"name": "johan", "grade": "vi"}' 
'{"name": "johan", "grade": "ii"}' 

我的測試查詢是一樣的你,這裏是結果:

"hits" : { 
    "total" : 2, 
    "max_score" : null, 
    "hits" : [ ]   // <-- see this part is blank 
    } 

正如你所看到的,它沒有列出命中,但有兩個命中。這是因爲from:20代碼段。如果你改變這個值,你可以看到一些結果。如果您想查看所有結果,只需刪除該部分即可。

注意:那麼,如果不是這種情況,很抱歉打擾:(

+1

嗨,謝謝,但我測試沒有分頁,沒有得到任何結果,我也嘗試過使用Curl命令行,但沒有運氣,我仍然得到''total':0'。 – Sthe

+0

什麼是你的索引設置分析器和映射)?我使用了default_analyzer,這可能是問題。 – shyos

+0

我發現了這個問題。這次我確實是個笨蛋: 我一直在試圖用不同的schemer檢索記錄。記錄A有'firstname'字段,但沒有'grade'字段。記錄B有'年級',但沒有'firstname'。我以某種方式試圖聚合。這意味着我可能不得不使用'should',然後將代碼中的記錄以某種方式組合起來,這是一個完全不同的問題。對?我猜這在ElastcSearch中是不可能的? – Sthe

相關問題