2016-02-29 40 views
1

今天,我發現elasticsearch的怪異的行爲1.5.2不正確的和/或優先QUERY_STRING

我索引的兩份文件:(爲什麼?)

POST http://localhost:9200/index/type { 
    "string":"a b" 
} 

POST http://localhost:9200/index/type { 
    "string" : "c d" 
} 

而下面的查詢返回沒有命中:

POST http://localhost:9200/index/type/_search 
{ 
    "query" : { 
     "query_string" : { 
      "query_string" : { 
       "query" : "string:a AND string:b OR string:c AND string:d" 
      } 
     } 
    } 
} 

但是超過與運算括號同一查詢返回2個文件,按預期:

POST http://localhost:9200/index/type/_search 
{ 
    "query" : { 
     "query_string" : { 
      "query_string" : { 
       "query" : "(string:a AND string:b) OR (string:c AND string:d)" 
      } 
     } 
    } 
} 

根據規範 (https://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-query-string-query.html

NOT優先於AND,其中在優先或

所以兩個詢問必須返回相同的結果。

這是錯誤還是我錯過了什麼?

在此先感謝!

回答

0

由你

"query" : "string:a AND string:b OR string:c AND string:d" 

作品都提到過的查詢,b和d應該出現在string,如果c是存在,那麼該文件將被提升起來。

這就是爲什麼它尋找它在任何文檔中找不到的a,b和d並且不顯示任何結果。

按照規範here

AND和OR可以影響的條款左右。

您也可以參考this