2014-02-06 81 views
2

我目前正在調查常用術語查詢的使用,並且由於文檔有點缺乏(無論是或者我不是簡單地在這些問題上找不到任何文檔),我我不完全確定某些操作是否與常見術語查詢不兼容,或者如果我做錯了。Elasticsearch的常見術語查詢,使用和與查詢類型的兼容

我目前在Ubuntu 12.04,64位的Elasticsearch版本0.90.5上。

這裏就是我觀察:

  • 類型匹配和match_phrase似乎與使用high_freq_operator,low_freq_operator和minimum_should_match選項的不兼容的查詢。 (例如[match] query does not support [high_freq_operator]和類似的)

  • 和或或(而不是)(複合表達式)在它們的組件表達式指定使用常用術語時似乎會產生中斷的基礎表達式。 (例如[_na] filter malformed, must start with start_object

  • span_term查詢似乎與常用術語查詢不兼容。 (如[span_term] query does not support [common]

我的查詢看看這個:

例如這一個解析...

{ "query": {                                                        
     "match_phrase": {                                                     
      "subject": {                                                      
       "common": {                                                     
        "body": {                                                    
         "cutoff_frequency": 0.001,                                               
         "query": "something not important"                                             
        }                                                      
       }                                                       
      }                                                        
     }                                                         
    }                                                          
} 

這一個無法解析,理由是「[匹配]查詢不支持[high_freq_operator]「:

{"query": {                                                        
     "match_phrase": {                                                     
      "subject": {                                                      
       "common": {                                                     
        "body": {                                                    
         "cutoff_frequency": 0.001, 
         "high_freq_operator": "or",                                               
         "query": "something not important"                                             
        }                                                      
       }                                                       
      }                                                        
     }                                                         
    }                                                          
} 

這一個不能解析,引用」過濾器格式錯誤,必須啓動機智h start_object「:

{                                                           
    "filter": {                                                        
     "or": [                                                        
      {                                                        
       "query": {                                                     
        "match": {                                                    
         "subject": {                                                 
          "common": {                                                  
           "body": {                                                 
            "cutoff_frequency": 0.001,                                            
            "query": "PLEASE READ: something not important"                                       
           }                                                   
          }                                                    
         }                                                     
        }                                                      
       }                                                       
      },                                                        
      {                                                        
       "query": {                                                     
        "range": {                                                    
         "date": {                                                   
          "to": "2009-12-31T23:59:59Z"                                              
         }                                                     
        }                                                      
       }                                                       
      }                                                        
     ]                                                         
    }                                                          
} 

回答

5

您誤解了查詢的結構。查詢既可以是「葉」查詢(可直接處理單個字段或字段),也可以是包含其他查詢的「複合」查詢,如booldis_max查詢。

一個common組術語查詢是在自己的權利葉查詢,就像matchmatch_phrasetermrange查詢。您不能在另一葉子查詢中嵌入common查詢。

match的查詢(不是match_phrase也不match_phrase_prefix)已與common組術語被部分地集成在查詢它所支持的cutoff_frequency參數。這是一個簡單的集成:如果您指定cutoff_frequency,則match查詢在內部被重寫爲common查詢。如果你想要common -terms的全部功能,那麼你需要直接使用它。

所以這match查詢:

{ 
    "query": { 
     "match": { 
     "subject": { 
      "query": "some words to query", 
      "cutoff_frequency": 0.001 
     } 
     } 
    } 
} 

是這個common查詢相當於:

{ 
    "query": { 
     "common": { 
     "subject": { 
      "query": "some words to query", 
      "cutoff_frequency": 0.001 
     } 
     } 
    } 
} 

所不同的是,在common查詢,還有一些其他的旋鈕,你可以twiddle,例如high_freq_operator

+0

謝謝。就像任何人閱讀這個回覆一樣,我發現match_phrase支持cutoff_frequency。 – rplevy

+1

match_phrase可能不會拒絕參數,但它沒有考慮到它:https://github.com/elasticsearch/elasticsearch/blob/master/src/main/java/org/elasticsearch/index/search/MatchQuery的.java#L208 – DrTech

相關問題