我正在使用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查询吗?
答案 0 :(得分:1)
试试这个:
_search?q=!Content:hello AND userID:1 AND userName:person
请记住,&符号用于分隔URL查询字符串中的参数(遗憾的是,它与ElasticSearch查询字符串的名称相同,但它引用了URL中的?符号后的整个参数集。)我认为您的写入的URL正在解析为
由于userID:1和userName:person未被解释为包含ElasticSearch查询字符串的q
参数的一部分,因此ElasticSearch会丢弃它们。
就文档而言,q
参数包含一个ElasticSearch查询字符串,即documented on its own page。