【问题标题】:angularjs and elasticsearch js api, how to force GET instead of POSTangularjs 和 elasticsearch js api,如何强制 GET 而不是 POST
【发布时间】:2014-11-27 15:32:15
【问题描述】:

我将 elasticsearch javascript api 与 angularjs 一起使用。这工作得很好,但我需要通过中间件查询弹性搜索服务以过滤危险请求(删除、更新)。中间件使用“GET”,但 API 默认使用“POST”查询。

根据文档,我可以指定参数“方法”以通过 API 使用“GET”查询: API Conventions

它适用于 'POST' 但使用 'GET',"GET' 失败,我有一个错误:

 Error: elasticQuery.search(...) is undefined

我该怎么办? 'Get' 可以像下面这个例子一样处理长而复杂的查询?

这就是我尝试的方法:

 return elasticQuery.search({
         method : 'GET',
         index: 'indexbotanic',
         from: 0
         size: 10,
         body: {
            "fields" : ["C_COLLECTIONCODE", "T_SCIENTIFICNAME", "T_SCIENTIFICNAMEAUTHORSHIP", "T_SPECIFICEPITHET", "T_KINGDOM", "T_PHYLUM", "T_CLASS_", "T_ORDER_", "T_FAMILY", "T_GENUS", "T_SUBGENUS", "T_VERNACULARNAME", "O_CATALOGNUMBER", "O_RECORDNUMBER", "O_CREATED", "O_SEX", "I_INSTITUTIONCODE", "D_DETERMINATIONID", "D_IDENTIFIEDBY", "M_IDENTIFIER", "E_RECORDNUMBER", "E_RECORDEDBY", "L_CONTINENT", "L_COUNTRY", "L_COUNTRYCODE", "L_COUNTY", "L_LOCALITY"],
            "query" : {
                "filtered" : {
                    "filter" : {
                        "and" : [{
                                "or" : [{
                                        "term" : {
                                            "L_CONTINENT" : "europe"
                                        }
                                    }
                                ]
                            }, {
                                "or" : [{
                                        "term" : {
                                            "T_FAMILY" : "lamiaceae"
                                        }
                                    }
                                ]
                            }, {
                                "or" : [{
                                        "term" : {
                                            "E_RECORDEDBY" : "balay, r."
                                        }
                                    }, {
                                        "term" : {
                                            "E_RECORDEDBY" : "boissier, p.e."
                                        }
                                    }
                                ]
                            }, {
                                "or" : [{
                                        "term" : {
                                            "T_SCIENTIFICNAME" : "lamium amplexicaule"
                                        }
                                    }
                                ]
                            }, {
                                "or" : [{
                                        "term" : {
                                            "T_GENUS" : "lamium"
                                        }
                                    }, {
                                        "term" : {
                                            "T_GENUS" : "betonica"
                                        }
                                    }
                                ]
                            }
                        ]
                    }
                }
            },
            "highlight" : {
                "pre_tags" : ["<strong>"],
                "post_tags" : ["</strong>"],
                "fields" : {
                    "C_COLLECTIONCODE" : {},
                    "O_CATALOGNUMBER" : {},
                    "O_RECORDNUMBER" : {},
                    "O_CREATED" : {},
                    "O_SEX" : {},
                    "D_DETERMINATIONID" : {},
                    "D_IDENTIFIEDBY" : {},
                    "E_EVENTID" : {},
                    "E_RECORDNUMBER" : {},
                    "E_RECORDEDBY" : {},
                    "L_CONTINENT" : {},
                    "L_COUNTRY" : {},
                    "L_COUNTRYCODE" : {},
                    "L_COUNTY" : {},
                    "L_LOCALITY" : {},
                    "T_SCIENTIFICNAME" : {},
                    "T_SCIENTIFICNAMEAUTHORSHIP" : {},
                    "T_SPECIFICEPITHET" : {},
                    "T_KINGDOM" : {},
                    "T_PHYLUM" : {},
                    "T_CLASS_" : {},
                    "T_ORDER_" : {},
                    "T_FAMILY" : {},
                    "T_GENUS" : {},
                    "T_SUBGENUS" : {},
                    "T_VERNACULARNAME" : {}

                }
            },
            "aggs" : {
                "L_CONTINENT_MISSING" : {
                    "missing" : {
                        "field" : "L_CONTINENT"
                    }
                },
                "O_SEX_MISSING" : {
                    "missing" : {
                        "field" : "O_SEX"
                    }
                },
                "I_INSTITUTIONCODE_MISSING" : {
                    "missing" : {
                        "field" : "I_INSTITUTIONCODE"
                    }
                },
                "T_TAXONRANK_MISSING" : {
                    "missing" : {
                        "field" : "T_TAXONRANK"
                    }
                },
                "D_TYPESTATUS_MISSING" : {
                    "missing" : {
                        "field" : "D_TYPESTATUS"
                    }
                },
                "O_HASMEDIA_MISSING" : {
                    "missing" : {
                        "field" : "O_HASMEDIA"
                    }
                },
                "T_SCIENTIFICNAME_MISSING" : {
                    "missing" : {
                        "field" : "T_SCIENTIFICNAME"
                    }
                },
                "T_FAMILY_MISSING" : {
                    "missing" : {
                        "field" : "T_FAMILY"
                    }
                },
                "T_GENUS_MISSING" : {
                    "missing" : {
                        "field" : "T_GENUS"
                    }
                },
                "E_RECORDEDBY_MISSING" : {
                    "missing" : {
                        "field" : "E_RECORDEDBY"
                    }
                },
                "L_CONTINENT" : {
                    "terms" : {
                        "field" : "L_CONTINENT",
                        "size" : 20
                    }
                },
                "O_SEX" : {
                    "terms" : {
                        "field" : "O_SEX",
                        "size" : 20
                    }
                },
                "I_INSTITUTIONCODE" : {
                    "terms" : {
                        "field" : "I_INSTITUTIONCODE",
                        "size" : 20
                    }
                },
                "T_TAXONRANK" : {
                    "terms" : {
                        "field" : "T_TAXONRANK",
                        "size" : 20
                    }
                },
                "D_TYPESTATUS" : {
                    "terms" : {
                        "field" : "D_TYPESTATUS",
                        "size" : 20
                    }
                },
                "O_HASMEDIA" : {
                    "terms" : {
                        "field" : "O_HASMEDIA",
                        "size" : 20
                    }
                },
                "T_SCIENTIFICNAME" : {
                    "terms" : {
                        "field" : "T_SCIENTIFICNAME",
                        "size" : 20
                    }
                },
                "T_FAMILY" : {
                    "terms" : {
                        "field" : "T_FAMILY",
                        "size" : 20
                    }
                },
                "T_GENUS" : {
                    "terms" : {
                        "field" : "T_GENUS",
                        "size" : 20
                    }
                },
                "E_RECORDEDBY" : {
                    "terms" : {
                        "field" : "E_RECORDEDBY",
                        "size" : 20
                    }
                }
            },
            "sort" : "_score"
        }
     }).then(function (response) {
     ...
     }

例如,这与 GET 一起工作:

curl -XGET 'http://localhost:9200/index/tablename/_search?pretty' -d '{
  "query": {
    "query_string": { 
         "query":"*keysearch*", 
         "fields": ["field1","field2","field3"]
     }
   }
}'

那么如何强制 api 使用 "-d '{ .... }' " 发送 get 呢? 非常感谢

【问题讨论】:

    标签: angularjs elasticsearch


    【解决方案1】:

    尝试使用此客户端:https://github.com/YousefED/elasticsearch.angular.simple 并将 POST 更改为 GET。我不确定哪些浏览器支持带有正文的 GET 请求,您可能会遇到限制。

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 2015-06-02
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2012-11-03
      相关资源
      最近更新 更多