Php 组合范围和必须在elasticsearch中过滤
我对ElasticSearch有一些问题。我是新手,所以这很正常。 我的需要是在我的网站上配置搜索。我有一些视频和一些过滤器,以减少显示的结果。 我有精确匹配过滤器,但也有范围过滤器 因此,我的问题是根据用户搜索的内容,将搜索关键字与这些过滤器结合起来 到目前为止,我已经将搜索的关键字与范围过滤器相结合,但是如果设置了精确的匹配过滤器,我不知道该怎么做 以下是参数如何转到Elasticsearch:Php 组合范围和必须在elasticsearch中过滤,php,
elasticsearch,filter,range,Php,
elasticsearch,Filter,Range,我对ElasticSearch有一些问题。我是新手,所以这很正常。 我的需要是在我的网站上配置搜索。我有一些视频和一些过滤器,以减少显示的结果。 我有精确匹配过滤器,但也有范围过滤器 因此,我的问题是根据用户搜索的内容,将搜索关键字与这些过滤器结合起来 到目前为止,我已经将搜索的关键字与范围过滤器相结合,但是如果设置了精确的匹配过滤器,我不知道该怎么做 以下是参数如何转到Elasticsearch: [body] => Array ( [query]
[body] => Array
(
[query] => Array
(
[filtered] => Array
(
[query] => Array
(
[multi_match] => Array
(
[query] => messi
[fields] => Array
(
[0] => title
[1] => duration
[2] => id_category
[3] => id_tag
)
[fuzziness] => 0.5
)
)
[filter] => Array
(
[range] => Array
(
[duration] => Array
(
[gte] => 0
[lte] => 300
)
)
)
)
)
)
如果我用过滤器只显示视频,并在某些类别中匹配持续时间在0到300秒之间的关键词“梅西”,那会是什么样子
这是忠告 看一看。我建议您将多重匹配查询放在“必须”部分,并将过滤器移动到(非常明显的)过滤器部分。因此,ES将基于多重匹配计算相关性分数,但将其与过滤器的可缓存性相结合。举个简单的例子:
<?php
$query = [
'body' => [
'query' => [
'bool' => [
'must' => [
[
'multi_match' => []
],
...
],
'filter' => [
[
'range' => []
],
...
]
]
]
]
];
看一下。我建议您将多重匹配查询放在“必须”部分,并将过滤器移动到(非常明显的)过滤器部分。因此,ES将基于多重匹配计算相关性分数,但将其与过滤器的可缓存性相结合。举个简单的例子:
<?php
$query = [
'body' => [
'query' => [
'bool' => [
'must' => [
[
'multi_match' => []
],
...
],
'filter' => [
[
'range' => []
],
...
]
]
]
]
];