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