Php 嵌套elasticsearch对象中所有关键帧内的搜索值
我想知道是否可以在一个查询中搜索嵌套Php 嵌套elasticsearch对象中所有关键帧内的搜索值,php,
elasticsearch,Php,
elasticsearch,我想知道是否可以在一个查询中搜索嵌套Elasticsearch对象中所有数组元素的值?下一步看我的情况: 在ElasticSearch数据库中,我在name列上配置了一个嵌套对象: $set_index = [ 'index' => 'table', 'body' => [ 'mappings' => [ 'table' => [ '_source' => [
Elasticsearch
对象中所有数组元素的值?下一步看我的情况:
在ElasticSearch
数据库中,我在name
列上配置了一个嵌套对象:
$set_index = [
'index' => 'table',
'body' => [
'mappings' => [
'table' => [
'_source' => [
'enabled' => true
],
'properties' => [
"name" => [ // name of column
"type" => "nested"
],
]
]
]
]
];
然后我插入以下数据(通过PHP
):
然后我使用POST
方法通过Postman
Chrome
扩展查询该数据:
POSThttp://localhost:9200/_search
正文是:
{
"query":{
"nested": {
"path": "name",
"query": {
"bool": {
"must": [
{ "match": { "name.en": "First" }}
]
}
}
}
}
}
这是完美的工作。在上面的查询中,我是根据名称列中的英语翻译来查询数据的
因此,如果我想使用俄语
语言进行搜索,代码如下:
{ "match": { "name.ru": "First" }}
现在,我想做的是同时查询所有翻译(可以提供1到100种语言)。比如:
{ "match": { "name.*": "First" }}
问题-这是否可能,使用我当前的配置?如果不使用当前配置,那么如何使用?我知道,如果我将名称
列转换回普通类型(而不是嵌套的
),那么它就成为可能,因为所有的翻译都集中在一个字符串
类型值中。但在这种情况下,我失去了选择的可能性!我两者都要:)最好不要重复数据
问题-如果我同时搜索所有的翻译-有可能将一种语言优先于另一种语言吗?因此,如果worddata
有5种语言,我希望包含English
搜索结果的文档位于列表的第一位
好,
在阅读了无数教程后,我得出结论,ElasticSearch
无法使用关联数组
。相反,应使用多维数组
这里有一个例子。之前:
$arr = array(
'name' => [
'en' => 'First name',
'ru' => 'Первое имя',
]
);
转换为多维:
$arr = array(
'name' => [
[
'lang' => 'en',
'value' => 'First name data'
],
[
'lang' => 'ru',
'value' => 'Первое имя'
]
]
);
现在,回到我的问题上来。结束ElasticSearch
查询如下所示:
{
"query":{
"nested": {
"path": "name",
"query": {
"bool": {
"should": [
{ "term": { "name.lang": "it" }}
],
"must": [
{ "match": { "name.value": "first" }}
]
}
}
}
}
}
答复:
- 对问题1的回答-从上述查询中删除
应部分
- 对问题2的回答-保留
应部分。在那里设置首选语言代码
如果我们想按特定语言搜索,那么应该
应该设置为必须
{
"query":{
"nested": {
"path": "name",
"query": {
"bool": {
"should": [
{ "term": { "name.lang": "it" }}
],
"must": [
{ "match": { "name.value": "first" }}
]
}
}
}
}
}