使用存储在Angular变量中的URI查询来查询elasticsearch

时间:2016-01-08 14:05:54

标签: angularjs elasticsearch

我正在使用Elastic Search构建搜索应用程序。我打算使用Angular使用Angular的$ http.get函数和弹性搜索URL查询向应用程序发送查询。因此,要获取字段userID = 1的所有记录,我将查询:

将angular $ http.get变量设置为:

elasticsearch:9200/application/_search?q=userID:1

这样可以正常工作,但是当我想在同一个查询中包含其他Bool搜索时,事情变得很糟糕。

因此,如果我想查询userID = 1且userName =不包含单词" hello"的所有记录,我构建Angular $ http.get为:

elasticsearch:9200/application/_search?q=!Content:hello&userID:1&userName:person&default_operator=AND

但这并没有返回所需的输出。

我认为这是第一个表达式是NOT搜索的问题,它似乎将整个查询设置为NOT查询,而不是(NOT Content hello)AND(userID = 1)AND(username = person)是我想要找到的。

有关使用URL查询的elasticsearch的文档是有限的,我无法找到有关如何构建此类搜索的任何信息。

我应该使用elasticsearch java客户端的propper DSL而不使用URL查询吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

_search?q=!Content:hello AND userID:1 AND userName:person

请记住,&符号用于分隔URL查询字符串中的参数(遗憾的是,它与ElasticSearch查询字符串的名称相同,但它引用了URL中的?符号后的整个参数集。)我认为您的写入的URL正在解析为

  • 网址参数1:q =!内容:hello
  • 网址参数2:userID:1
  • 网址参数3:userName:person
  • 网址参数4:default_operator = AND

由于userID:1和userName:person未被解释为包含ElasticSearch查询字符串的q参数的一部分,因此ElasticSearch会丢弃它们。

就文档而言,q参数包含一个ElasticSearch查询字符串,即documented on its own page