Elasticsearch的常用术语查询,使用和与查询类型的兼容性

时间:2014-02-06 23:21:25

标签: elasticsearch

我目前正在调查常用术语查询的使用,因为文档有点缺乏(或者我不是简单地找不到关于这些问题的任何文档)我不完全确定某些操作是否与常见的操作不兼容术语查询,或者如果我做错了。

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

以下是我观察的内容:

  • 查询类型match和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"                                                                                                                                                                                  
                    }                                                                                                                                                                                                                       
                }                                                                                                                                                                                                                           
            }                                                                                                                                                                                                                               
        }                                                                                                                                                                                                                                   
    }                                                                                                                                                                                                                                       
} 

这个没有解析,引用“[match]查询不支持[high_freq_operator]”:

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

这个没有解析,引用“过滤格式错误,必须以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"                                                                                                                                                                                    
                        }                                                                                                                                                                                                                   
                    }                                                                                                                                                                                                                       
                }                                                                                                                                                                                                                           
            }                                                                                                                                                                                                                               
        ]                                                                                                                                                                                                                                   
    }                                                                                                                                                                                                                                       
} 

2 个答案:

答案 0 :(得分:5)

您误解了查询的结构。查询可以是“叶子”查询(直接处理单个字段或字段),也可以是包含其他查询的“复合”查询,例如booldis_max查询。

common - 术语查询本身就是一个叶子查询,就像matchmatch_phrasetermrange查询一样。您无法在另一个叶子查询中嵌入common查询。

match查询(不是match_phrasematch_phrase_prefix)已与common - 条款查询部分集成,因为它支持cutoff_frequency参数。这是一个简单的集成:如果您指定cutoff_frequency,那么match查询将在内部重写为common查询。如果您想要common - 术语的全部功能,那么您需要直接使用它。

所以这个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查询中有许多其他旋钮可以旋转,例如high_freq_operator

答案 1 :(得分:0)

对于Elasticsearch 6.4

例如,使用过滤器查询将常见加入其中,

{
  "explain": true,
  "query": {
    "bool": {
      "must": {
        "common": {
          "task_content": {
            "query": "this is bonsai cool superb",
            "cutoff_frequency": 0.01,
            "high_freq_operator": "and"
          }
        }
      },
      "filter": {
        "term": {
          "subject_id": 2
        }
      }
    }
  },
  "highlight": {
    "fields": {
      "task_content": {}
    }
  }
}

希望它对新版本有所帮助。