我有一个应用程序想要公开API以向用户查询Arbitary和OR NOT查询。用户应该能够给我一个字符串,其中包含任意数量的AND,OR和NOT短语。嵌套规则应该是括号,并且应该应用正常的优先规则。 作为一个例如。
query =((Abhishek AND Vaid)OR(Abhishek AND Vaids))AND NOT(Abhishek AND Vaider)应该是有效的查询。 运营商的规则如下:
有没有办法让我从ES中的Java Driver开箱即用?请注意,我总是可以在嵌套的布尔值中转换这样的查询,但我不想写一个词法分析器和解析器来创建一个解析树,然后将其解析为复杂的布尔DSL。 我正在寻找一些现有功能来实现这一目标。
答案 0 :(得分:3)
由于您为用户提供了自己创建查询的能力,因此您无法确定他们将输入什么。 query_string
将起作用,但如果您的用户提供语法错误的查询,则很可能会抛出异常。
出于这个原因,创建了另一个查询,即strftime,它在语义上等同于query_string
,但绝不会抛出任何异常并丢弃用户所做的任何语法错误。
另外,可以使用flags
设置仅启用所需的运算符,即AND(+
),OR(|
)和NOT({{ 1}})。
-
答案 1 :(得分:2)
这是可能的。如果我理解正确,您需要Query String Query
取自文件:
使用查询解析器解析其内容的查询。这里 是一个例子:
{ "query_string" : { "default_field" : "content", "query" : "this AND that OR thus" } }
你应该弄清楚如何使用它来实现你的逻辑。