当前位置: 首页 > 知识库问答 >
问题:

嵌套:QueryParsingException[[multi_match]查询不支持[fields]];

蔺劲
2023-03-14

我是弹性出版社的新手,在Wordpress多网络站点上遇到了一些问题,在尝试执行WP-Query时遇到了这个异常

由:SearchParseException[未能解析搜索源[{“from”:0,“size”:3,“sort”:[{“_score”:{“order”:“desc”}}],“query”:{“bool”:{“shoul”:[{“multi_match”:{“query”:“test”,“type”:“price”,“fields”:{“0”:“post_title”,“1”:“post_content”,“2”:“post_content”,“3”:“author_name”,“taxomies”:“查询”:“测试”,“字段”:{“0”:“Post_Title”,“1”:“Post_Content”,“2”:“Post_Excerpt”,“3”:“authorname”,“分类法”:[“Post_Tag”,“Category”]},“multi_match”:{“字段”:{“0”:“Post_Title”,“1”:“Post_Content”,“2”:“Post_Excerpt”,“3”:“author_Name”,“分类法”:[“Post_Tag”,“Category”]},“查询”:“测试”},“post_filter”:{“bool”:{“必须”:[{“术语”:{“post_type.raw”:[“post”、“页面”、“附件”、“事件”]}},{“术语”:{“post_status”:[“发布”、“acf禁用”]}}]}},“aggs”:{“术语”:{“filter”:{“bool”:{“必须”:[{“术语”:{“post_type.raw”:[“post”、“页面”、“附件”、“事件”]}},{“术语”:{“post_type.raw”:[“post”、“_status“:[”发布“,”禁用ACF“]}}]}},”aggs“:{”category“:{”size“:{”size“:10000,”field“:”terms.category.slug“}},”post_tag“:{”terms“:{”size“:10000,”field“:”terms.post_tag.slug“}},”post_format“:{”terms“:{”size“:10000,”field“:”terms.post_format.slug“}},”themes“:{”terms“:10000,”字段“:”terms.themes.slug“}},”story_labels“:{”术语“:{”size“:10000,”字段“:”terms.story_labels.slug“}},”资产-类别“:{”术语“:{”size“:10000,”字段“:”terms.asset-class.slug“}},”区域“:{”术语“:{”size“:10000,”字段“:”terms.region.slug“}},”大小“:{”术语“:{”size“:10000,”字段“:”terms.size.slug“”terms.places.slug“}},”组织“:{”terms“:{”size“:10000,”field“:”terms.organizations.slug“}},”people“:{”terms“:10000,”field“:”terms.people.slug“}}}}}}]];nested:QueryParsingException[[multi_match]查询不支持[fields]];

导致此问题的弹性按压代码示例:

<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ElasticpressFilters
 *
 * @author serafim_inplayer
 */
class ElasticpressFilters
{

public function __construct()
{
    /*
     *  Hook into ep_formatted_args to add wighting arguments.
     */
    add_filter('ep_formatted_args', [$this, 'set_es_search_args'], 300, 2);
}

function set_es_search_args($formatted_args, $args)
{
    $search_fields = [
        'post_title',
        'post_excerpt',
        'post_content'
    ];

    if (isset($args['search_fields'])) {
        $search_fields = $args['search_fields'];
    }

    if (isset($args['exact']) && $args['exact'] == true) {
        $query = [
            'multi_match' => [
                'query' => '',
                'type' => 'phrase',
                'fields' => $search_fields,
                'boost' => apply_filters('ep_match_phrase_boost', 4, $search_fields, $args),
                'operator' => 'and',
                'fuzziness' => 0,
            ]
        ];

        if (!empty($args['s'])) {
            unset($formatted_args['query']);
            $query['multi_match']['query'] = $args['s'];
            $formatted_args['query'] = $query;
        }
    } else {

        $query = [
            'bool' => [
                'should' => [
                    [
                        'multi_match' => [
                            'query' => '',
                            'type' => 'phrase',
                            'fields' => $search_fields,
                            'boost' => apply_filters('ep_match_phrase_boost', 4, $search_fields, $args),
                            'fuzziness' => 0,
                            'operator' => 'and',
                        ]
                    ],
                    [
                        'multi_match' => [
                            'query' => '',
                            'fields' => $search_fields,
                            'boost' => apply_filters('ep_match_boost', 2, $search_fields, $args),
                            'fuzziness' => 0,
                        ]
                    ],
                    [
                        'multi_match' => [
                            'fields' => $search_fields,
                            'query' => '',
                            'fuzziness' => 0,
                            'operator' => 'and',
                        ],
                    ]
                ],
            ],
        ];

        /**
         * We are using ep_integrate instead of ep_match_all. ep_match_all will be
         * supported for legacy code but may be deprecated and removed eventually.
         *
         * @since 1.3
         */
        if (!empty($args['s'])) {
            $query['bool']['should'][2]['multi_match']['query'] = $args['s'];
            $query['bool']['should'][1]['multi_match']['query'] = $args['s'];
            $query['bool']['should'][0]['multi_match']['query'] = $args['s'];
            $formatted_args['query'] = apply_filters('ep_formatted_args_query', $query, $args);
        } else if (!empty($args['ep_match_all']) || !empty($args['ep_integrate'])) {
            $formatted_args['query']['match_all'] = ['boost' => 1];
        }
    }

    /*
     * Exclude posts with defined categories by slugs in array
     */

    if (!empty($args['ep_integrate']) && !empty($args['ep_exclude_categories'])) {
        $formatted_args['post_filter']['bool']['must'][0]
            ['bool']['should'][0]['bool']['must_not'][]
            ['terms']['terms.category.slug'] = $args['ep_exclude_categories'];
    }

    /*
     * If ep_exists_key_themes is true will display all posts with key themes
     */
    if (!empty($args['ep_integrate']) && !empty($args['ep_exists_key_themes'])) {
        $formatted_args['post_filter']['bool']['must'][0]
            ['bool']['should'][1]['bool']['must'][]
            ['exists']['field'] = 'terms.key_themes.term_id';
    }

    return $formatted_args;
}

当$search_fields获得这些值(数组中的数组)时,会出现这样的问题:

$search_fields = array(
            'post_title',
            'post_content',
            'post_excerpt',
            'author_name',
            'taxonomies' => array(
                'post_tag',
                'category',
            )
        );

多谢帮忙。

共有1个答案

钱稳
2023-03-14

你需要平整你的领域:

 $search_fields = array(
                'post_title',
                'post_content',
                'post_excerpt',
                'author_name',
                'taxonomies.post_tag',
                'taxonomies.category'
   );
 类似资料:
  • 在ElasticSearch7.x中,我使用一个具有同义词过滤器的分析器对数据字段进行了索引。但是,为了支持增强“完全”匹配数据字段中的查询词的查询,而不是匹配数据中的同义词的查询,我将使用。 为此,对于我想要精确匹配的查询,我想提供一个在其中没有同义词过滤器的分析器。这可以通过来完成。但是,我的主要查询是查询,用于在所有需要的字段上搜索这些术语(并且具有不同的重要性(boosting))。 似乎

  • 我在Elasticsearch中有一个查询,我希望在多个字段上进行匹配以获得恒定分数 但我得到以下错误: "[constant_score]查询不支持[multi_match]",

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga

  • 我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。

  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 我正在尝试为我的项目使用插件,但在运行命令时得到错误。谁能帮助解决这个问题。提前道谢。 我的Build.sbt 名称:=“包装” 版本:=“1.0” enablePlugins(JDKPackagerPlugin) 我的主要班级 我的plugins.sbt