2015-03-03 86 views
1

我正在使用Elasticsearch查詢數據庫中的作業。以下是我正在使用的查詢。Elasticsearch忽略查詢字符串

查詢應問以下內容:
-Query匹配的文本,名稱或說明
-Job必須包含所有給定的類別和段

的但是我是有問題,是當我給一個查詢,並添加段和類別。查詢被忽略,並且請求返回具有給定段和類別的所有作業。

{ 
    "index": "jobs", 
    "type": "job", 
    "body": { 
    "query": { 
     "filtered": { 
     "query": { 
      "bool": { 
      "must": [ 
       { 
       "match": { 
        "categories": "23" 
       } 
       }, 
       { 
       "match": { 
        "segments": "10" 
       } 
       } 
      ], 
      "should": [ 
       { 
       "match": { 
        "name": "php" 
       } 
       }, 
       { 
       "match": { 
        "text": "php" 
       } 
       }, 
       { 
       "match": { 
        "description": "php" 
       } 
       } 
      ] 
      } 
     }, 
     "filter": { 
      "nested": { 
      "path": "networks", 
      "filter": { 
       "bool": { 
       "must": [ 
        { 
        "term": { 
         "networks.id": 1 
        } 
        }, 
        { 
        "term": { 
         "networks.status.raw": "PRODUCTION" 
        } 
        }, 
        { 
        "range": { 
         "networks.start": { 
         "lte": "now" 
         } 
        } 
        }, 
        { 
        "range": { 
         "networks.end": { 
         "gte": "now" 
         } 
        } 
        } 
       ] 
       } 
      } 
      } 
     } 
     } 
    }, 
    "aggs": { 
     "categories": { 
     "terms": { 
      "field": "categories" 
     } 
     }, 
     "segments": { 
     "terms": { 
      "field": "segments" 
     } 
     } 
    } 
    } 
} 

作爲旁註,我使用laravel和elasticsearch的PHP實現,並且上述是查詢陣列的json_encoded表示。 (類型可能已被篡改)

+0

至於建議,發送到彈性不串「23」,但詮釋23,因爲它有比較問題(舉例:「23」 = 23) – sergio 2015-03-03 11:30:36

+0

這是一個事實,即引起我使用elasticsearchs php實現,上面是查詢數組的json編碼表示(probaly不完全是發送給ES0的。 – 2015-03-03 11:32:45

回答

0

好吧,我理解了它自己:

在布爾查詢與必備條款在multi_match能解決我的問題,更換應參數。

子句(查詢)應該出現在匹配文檔中:

{ 
    "index": "jobs", 
    "type": "job", 
    "body": { 
    "query": { 
     "filtered": { 
     "query": { 
      "bool": { 
      "must": [ 
       { 
       "multi_match": { 
        "query": "php", 
        "fields": [ 
        "name", 
        "text", 
        "description" 
        ] 
       } 
       }, 
       { 
       "match": { 
        "segments": "10" 
       } 
       } 
      ] 
      } 
     }, 

,因爲它是在文檔中指出原來很明顯的。 在 布爾查詢沒有必須條款,一個或多個應該條款必須 匹配文檔。要匹配的最小條數應該是 ,使用minimum_should_match參數設置。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html#query-dsl-bool-query