在PHP的Elasticsearch中使用建议者时非法参数异常

时间:2019-05-31 05:52:26

标签: php elasticsearch

我尝试按照给定的here在php中实现完成建议器查询。我的代码是:

$params = [
            "index" => $myIndex,
            "body" => [
                "try" => [
                    "text" => "ram",
                    "completion" => [ "value" => "suggest"]
                ]
            ]
        ];

        $response = $client->suggest($params);

我已经完成了这样的索引编制:

$params = [
        "index" => $myIndex,
            "body" => [
            "settings"=> [
            "analysis"=> [
                "analyzer"=> [
                "start_with_analyzer"=> [
                    "tokenizer"=> "my_edge_ngram",
                    "filter"=> [
                    "lowercase"
                    ]
                ]
                ],
                "tokenizer"=> [
                "my_edge_ngram"=> [
                    "type"=> "edge_ngram",
                    "min_gram"=> 3,
                    "max_gram"=> 15
                ]
                ]
            ]
            ],
            "mappings"=> [
            "doc"=> [
                "properties"=> [
                "label"=> [
                    "type"=> "text",
                    "fields"=> [
                    "keyword"=> [
                        "type"=> "keyword"
                    ],
                    "ngramed"=> [
                        "type"=> "text",
                        "analyzer"=> "start_with_analyzer"
                    ]
                    ]
                ]
                ]
            ]
            ]
    ]
    ];
    $response = $client->indices()->create($params);    // create an index

我收到以下错误:

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "[completion] unknown field [value], parser not found"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "[completion] unknown field [value], parser not found"
    },
    "status": 400
} 

我尝试将value更改为value.keyword,但显示相同的错误。我正在使用弹性搜索5.3.2。如何解决此错误?

1 个答案:

答案 0 :(得分:0)

在查询中,您使用的是补全中的字段“值”,而不是这样的字段,那就是确切的错误所在。

您可以尝试以下解决方案:

    $params = [
                "index" => $myIndex,
                "body" => [
                    "try" => [
                        "text" => "ram",
                        "completion" => [ "label" => "suggest"]
                    ]
                ]
            ];
   $response = $client->suggest($params);

希望这会起作用。