elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

如何在Elasticsearch PHP客户端中进行字段增强?

如何在Elasticsearch PHP客户端中进行字段增强?,php,elasticsearch,Php,elasticsearch,我第一次使用Elasticsearch,并且已经完成了索引和基本搜索,但是我正在寻找一些复杂的搜索 使用PHP客户端,如何进行部分搜索和字段增强/相关性?最后,我希望搜索多个字段以查找部分匹配、精确匹配,并增强某些字段 这是我到目前为止所拥有的,但我无法让它工作。Elasticsearch文档不好 $show_params = [ 'index' => env('ES_INDEX'), 'type' => 'show', 'size' => 6,

我第一次使用Elasticsearch,并且已经完成了索引和基本搜索,但是我正在寻找一些复杂的搜索

使用PHP客户端,如何进行部分搜索和字段增强/相关性?最后,我希望搜索多个字段以查找部分匹配、精确匹配,并增强某些字段

这是我到目前为止所拥有的,但我无法让它工作。Elasticsearch文档不好

$show_params = [
    'index' => env('ES_INDEX'),
    'type' => 'show',
    'size' => 6,
    'body' => [
        'query' => [
            'bool' => [
                'should' => [
                    [
                        'match' => [
                            'title' => [
                                'query' => '*' . $q . '*',
                                'boost' => 2
                            ]
                        ]
                    ],
                    [
                        'match' => [
                            'synopsis' => '*' . $q . '*'
                        ]
                    ]
                ]
            ]
        ]
    ]
];

$client = \Elasticsearch\ClientBuilder::create()->build();

$show_raw_results = $client->search($show_params);

基本的
match
查询不支持通配符,这就是查询无法工作的原因(不过,boosting语法是正确的)

您可以尝试使用,但它有一些限制(特别是,它是未分析的查询,这意味着您的输入文本需要“预分析”):

然而,这并不一定是最好的方法。通配符的速度较慢,并且会拉回许多文档,这可能会让您的用户感到沮丧(因为有许多分数较低、相关性较低的点击)

最重要的是,通配符不是经过分析的查询,这意味着查询文本不会经过分析。如果您搜索
“quick brown fox”
,上面的查询将搜索您的索引
“*quick brown fox*”
,就像它是一个令牌一样,而不是将它分成多个令牌(
[“quick”、“brown”、“fox”]
)并使用这些令牌进行搜索

我强烈建议您通读《最终指南》中的这一部分,或者从本章开头开始,按照自己的方式阅读。您需要对分析和标记化有很好的理解,才能通过部分/模糊匹配获得令人满意的结果

$show_params = [
    'index' => env('ES_INDEX'),
    'type' => 'show',
    'size' => 6,
    'body' => [
        'query' => [
            'bool' => [
                'should' => [
                    [
                        'wildcard' => [
                            'title' => [
                                'value' => '*' . $q . '*',
                                'boost' => 2
                            ]
                        ]
                    ],
                    [
                        'wildcard' => [
                            'synopsis' => '*' . $q . '*'
                        ]
                    ]
                ]
            ]
        ]
    ]
];

$client = \Elasticsearch\ClientBuilder::create()->build();

$show_raw_results = $client->search($show_params);