elasticseach的文档是非常非正式的。例如,Filtered Query没有指定是否需要“查询”或“过滤器”部分。“查询”下有一个注解说query definition
,但没有进一步解释这是什么意思。为了解释文档,需要进行大量的猜测来弄清楚什么是法律的。
在哪里可以找到elasticseach DSL的正式定义?
elasticseach的文档是非常非正式的。例如,Filtered Query没有指定是否需要“查询”或“过滤器”部分。“查询”下有一个注解说query definition
,但没有进一步解释这是什么意思。为了解释文档,需要进行大量的猜测来弄清楚什么是法律的。
在哪里可以找到elasticseach DSL的正式定义?
2条答案
按热度按时间zxlwwiss1#
第一个
query
是_search
端点的一个选项,您可以在其中指定您的查询,无论它可能多么复杂。第二个
query
是match
查询的一个参数,它包含要搜索的词。同意,它可以被称为value
、input
或whatever
。它没有任何递归,我承认它可能会让新来者感到困惑,但这就像能够在函数内外声明一个int
变量一样。语言无论如何,我已经使用DSL超过13年了,但我同意DSL的规范早就应该制定了。但是,如果我们重用您给出的示例查询,并决定使用OR运算符而不是AND运算符,我们可以将其写成如下的简短形式,因为我们使用了
match
查询的所有默认参数:字符串
正如您所看到的,不再有
query
,author
参数被直接指定为搜索项,而不是JSON散列和查询参数。这种灵活性使得很难提出一个清晰的DSL规范,因为根据您希望如何配置查询,有许多不同的方法来编写查询。实际上,在客户端和Elasticsearch服务器之间可以交换的所有操作和数据类型都有一个TypeScript“规范”,您可以在
elastic/elasticsearch-specification
Github repo中找到它,而且对于match
查询也是如此,其中描述了所有可能的参数。在第282行中,我们甚至可以看到
MatchQuery
被注解为@shortcut_property query
,这意味着整个JSON结构可以只替换为query
参数的值,正如我们前面所看到的。同样值得注意的是,您可以为Elasticsearch REST API支持的所有操作找到一个OpenAI specification。
同样值得注意的是,在即将发布的8.11版本中,一种名为ES|QL的新管道语言将被发布,the documentation of the language应该更符合你的喜好,因为它是一种更“正式”的语言,并附带了应用程序内的文档。
100d1x
的字符串
ycggw6v22#
我发现Elasticsearch Query DSL documentation相当全面。
我想在你强调的例子中,这有点棘手。过滤查询是一个链到另一个查询的结果。
过滤查询的
query definition
和filter definition
Map到查询DSL的queries和filters部分(可能不明显)。您可以使用过滤查询负载中的任何查询(匹配等)和任何过滤器(存在等)。