我正在为我们公司编写一个服务,使用Java,以便用户更容易地查询Elastic。对于这个任务,我使用"Java高级REST客户端"。
假设我有一个查询,看起来像这样:
host='hostnameOne' AND (owner='Sam' OR cpuNum=5) OR type LIKE 'Ubuntu'
有没有一种方法可以使用QueryBuilder或类似的东西来轻松构建这个查询?我看到有一个叫做"simpleQueryStringQuery"的东西,但我在尝试转换上面的查询时失败了。
您的选择如下:
- 使用query_string,不建议用于用户生成的输入。它不会像你期望的那样工作。此外,如果你不禁用某些特殊字符和关键字,它可能会很危险
- 使用simple_query_string,它是面向用户的query_string的替代方案。它不支持AND或LIKE。您需要解析输入并将其转换为simple_query_string语法
- 使用新的sqlrest api。您提供的示例看起来像SQL命令的WHERE子句https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-rest.html