Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 嵌套elasticsearch对象中所有关键帧内的搜索值_Php_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

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" }}
  • 问题-这是否可能,使用我当前的配置?如果不使用当前配置,那么如何使用?我知道,如果我将
    名称
    列转换回普通类型(而不是
    嵌套的
    ),那么它就成为可能,因为所有的翻译都集中在一个
    字符串
    类型值中。但在这种情况下,我失去了选择的可能性!我两者都要:)最好不要重复数据

  • 问题-如果我同时搜索所有的翻译-有可能将一种语言优先于另一种语言吗?因此,如果word
    data
    有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" }}
                        ]
    
                    }
                }
            }
        }
    }