如何解决使用elasticsearch v6中的术语从数组中搜索值不起作用
我正在为一份学校列表编制索引,每个学校都可以提供多种语言的课程。 我在 Symfony 4 项目中使用 FOSElasticaBundle。这是我的 fos_elastica.yaml :
fos_elastica:
indexes:
school_ndx:
index_name: school_ndx
types:
etablissement:
persistence:
driver: orm
model: App\Entity\School
properties:
languages: { property_path: myFuncLanguages }
这是 myFuncLanguages :
public function myFuncLanguages()
{
$list = [];
// some magic to find all languages for each School
return $list;
}
正如你在 yaml 文件的最后一行看到的,没有类型,所以 ES 会选择正确的结构,我希望是数组。
使用 Kibana 我运行这个查询:
GET _search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{"match_phrase":{"language":"english"}},{"match_phrase":{"language":"french"}}
]
}
}
]
}
}
}
这很好用:我所有的学校都提供英语和法语课程。但是因为我正在处理数组,所以我尝试了这个,因为我发现它更容易(这将在 Symfony 项目中实现它时节省我的代码):
GET _search
{
"query": {
"terms" : {
"language" : ["english","french"]
}
}
}
但它不起作用!然而,语言属性似乎是一个数组,因为第一个查询给出了这个:
{
...
"hits": {
"hits": [
{
"_index": "school_ndx","_source": {
...
"language": [
"english","french","deutch"
],
那么为什么这里不能使用术语?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。