2017-07-25 55 views
0

我有問題需要設置正確的篩選器。我的查詢是這樣的:無法爲我的彈性搜索查詢創建正確的篩選器

{ 
    "query" : { 
     "bool" : { 
      "must" : [ 
       { 
        "query_string" : { 
         "query" : "example~", 
         "analyzer" : "standard", 
         "default_operator" : "OR", 
         "fuzziness" : "AUTO" 
        } 
       }, 
       { 
        "term" : { 
         "client" : { 
          "value" : "MyClient", 
          "boost" : 1 
         } 
        } 
       }, 
       { 
        "range" : { 
         "dateCreate" : { 
          "gte" : "2016-01-01T00:00:00+0200", 
          "lte" : "2016-12-31T23:59:59+0200" 
         } 
        } 
       }, 
       { 
        "match" : { 
         "lang" : "php OR java" 
        } 
       } 
      ] 
     } 
    }, 
    "size" : 10, 
    "from" : 0, 
    "sort" : [ 
     { 
      "_score" : { 
       "order" : "desc" 
      } 
     } 
    ] 
} 

的「郎」字段類型的文本。
我的期望是使用給定的查詢字符串獲取所有文檔,然後我只想選擇在其lang字段中具有「PHP」或「Java」的文檔。 lang字段只包含「PHP」或「Java」,但從來沒有兩個字符串,所以我想使用完全匹配,但我無法得到它的工作。
結果實際上是兩個文檔的列表,但total_count = 2510。

一個不符合我的文檔:

{ 
    "id" : "d3295f18-a033-4934-941a-21a8bef901e8", 
    "client" : "MyClient", 
    "lang" : "PHP", 
    "author" : null, 
    "dateCreate" : "2016-03-31T00:00:00+0200", 
    "title" : "Sample document", 
    "content" : "This is a short text describing the deocument." 
} 
+0

如果刪除了'或'會發生什麼? – Val

+0

完全一樣:我得到兩個結果,但必須有大約2,000個文件才能列出。 – altralaser

+0

您可以顯示一個應該匹配但不包含文檔的示例文檔嗎? – Val

回答

0

是,在客戶區域是文本類型也。

client場必須是keyword類型的使用期限查詢或更改客戶端從termmatch查詢:

{ 
    "match" : { 
     "client" : { 
      "query" : "MyClient", 
      "boost" : 1 
     } 
    } 
} 
+0

但這並不能解決我的問題。 – altralaser

+0

我會做什麼 - 如果'lang'場單場工作,那麼我會嘗試將它與'range'查詢第一組合,比'term'等,以找出哪一個/哪個組合導致問題。您還可以向我們顯示映射並顯示與您的查詢一起正確返回的文檔 - 重新創建問題會更容易。 – Joanna