目前正在开发使用elasticsearch标签搜索应用程序,我已经给了该指数中的每个文档的标签数组,这里有一个文档外观的例子:Elasticsearch匹配给定的数组内的所有标签
_source: {
title: "Keep in touch scheme",
intro: "<p>hello this is a test</p> ",
full: " <p>again this is a test mate</p>",
media: "",
link: "/training/keep-in-touch",
tags: [
"employee",
"training"
]
}
我会喜欢能够进行搜索,并且只能返回包含所有指定标签的文档。
使用上面的示例,如果我搜索了带有标签["employee", "training"]
的文档,则会返回上述结果。
相反,如果我使用标签["employee", "other"]
进行搜索,则不会返回任何内容;搜索查询中的所有标签都必须匹配。
目前我做的:
query: {
bool: {
must: [
{ match: { tags: ["employee","training"] }}
]
}
}
但我刚刚返回例外像
IllegalStateException[Can't get text on a START_ARRAY at 1:128];
我也试图串联阵列和用逗号分隔的字符串,然而,这似乎符合任何给予第一个标签的匹配。
关于如何解决这个问题的任何建议?干杯
这个问题是标签可以改变量,它并不总是2 - 理想的情况下,我可以通过不同长度的查询 –
数组@ WilliamPaul我已经添加了另一个例子,但我无法找到解决方案如何在es v2.3.2中使用''minimum_should_match“:1' ... –
@WilliamPaul我还添加了'query_string'的例子。 –