首页 > 解决方案 > 为什么我不能使用我的分析仪并得到“无法找到分析”的答案?

问题描述

我用分析器制作了我的索引,就像在文档中一样(那里)。

这是我的索引创建:

$params = [
    'index' => 'mytestindex',
    'body' => [
        'settings' => [
            'analysis' => [
                'index_analyzer' => [
                    'my_index_analyzer' => [
                        'type' => 'custom',
                        'tokenizer' => 'standard',
                        'filter' => [
                            'lowercase',
                            'mynGram2'
                        ],
                    ],
                ],
                'search_analyzer' => [
                    'my_search_analyzer' => [
                        'type' => 'custom',
                        'tokenizer' => 'standard',
                        'filter' => [
                            'standard',
                            'lowercase',
                            'mynGram2'
                        ],
                    ],
                ],
                'filter' => [
                    'mynGram2' => [
                        'type' => 'nGram',
                        'min_gram' => 2,
                        'max_gram' => 20,
                    ],
                ],
            ],
            'max_ngram_diff' => 50,
        ],
    ],
];
$x = $this->obj->indices()->create($params);

然后我尝试使用我的分析器:

$params = [
    'index' => 'mytestindex',
    'body' => [
        'analyzer' => 'my_search_analyzer',
        'text' => 'текст проверить чтобы'
    ],
];
$x = $this->obj->indices()->analyze($params);

但我收到这条消息:

'{"error":{"root_cause":[{"type":"remote_transport_exception","re​​ason":"[PEREGOVOR2][127.0.0.1:9300][indices:admin/analyze[s]]"}], "type":"illegal_argument_exception","re​​ason":"未能找到分析器 [my_search_analyzer]"},"status":400}'

所以......我做错了什么?为什么我不能使用我的分析仪并得到“无法找到分析”的答案?

标签: phpelasticsearch

解决方案


您没有正确构建分析器。您的设置中只需要一个analyzer部分:

    $params = [
    'index' => 'mytestindex',
    'body' => [
        'settings' => [
            'analysis' => [
                'analyzer' => [                           <--- change this
                    'my_index_analyzer' => [
                        'type' => 'custom',
                        "tokenizer" => "standard",
                        'filter' => [
                            "lowercase",
                            "mynGram2"
                        ],
                    ],
                    'my_search_analyzer' => [
                        "type" => "custom",
                        "tokenizer" => "standard",
                        'filter' => [
                            "standard",
                            "lowercase",
                            "mynGram2"
                        ],
                    ],
                ],
                'filter' => [
                    'mynGram2' => [
                        "type" => "nGram",
                        "min_gram" => 2,
                        "max_gram" => 20,
                    ],
                ],
            ],
            "max_ngram_diff" => "50",
        ],
    ],
];
$x = $this->obj->indices()->create($params);

推荐阅读