我想知道是否可以在一个查询中嵌套Elasticsearch
对象中的所有数组元素中搜索值?见我的情况下一:搜索嵌套弹性搜索对象中所有键的值
然后我插入以下数据(通过PHP
):
在ElasticSearch
数据库,我在name
列配置嵌套对象
$data1 = array(
'descripotion' => 'Row 1',
'name' => [
'en' => 'First name data',
'ru' => 'Первое имя',
'de' => 'Eins data',
'it' => 'something else',
]
);
$data2 = array(
'descripotion' => 'Row 2',
'name' => [
'en' => 'Second name data',
]
);
然后我使用POST
方法通过Postman
Chrome
扩展:
POST http://localhost:9200/_search
身体是:
{
"query":{
"nested": {
"path": "name",
"query": {
"bool": {
"must": [
{ "match": { "name.en": "First" }}
]
}
}
}
}
}
这是可以正常使用。在上面的查询中 - 我正在根据English
翻译第name
列查询数据。
所以,如果我想使用Russian
语言进行搜索,代码就会一直跟着:
{ "match": { "name.ru": "First" }}
现在,我想做的事 - 是在同一时间所有的翻译查询(可以有提供1到100种语言)。喜欢的东西:
{ "match": { "name.*": "First" }}
的问题 - 这是可能的,用我目前的配置?如果没有使用当前的配置,那么如何?我知道,如果我将
name
列转换回正常类型(而不是nested
) - 那么它变得可能,因为所有翻译都集中在一个单独的string
类型值中。但在那种情况下 - 我放弃了选择性的可能性!我想都:) 最好,没有数据重复。问题 - 如果我在同一时间搜索所有翻译 - 是否可以优先考虑一种语言而不是另一种语言?因此,如果单词
data
是5种语言 - 我想要包含English
搜索结果的文档 - 列表中的第一个。