php - 在elasticsearch中是否可以只使用过滤器而不使用文本搜索

标签 php mysql laravel elasticsearch

我在 Laravel 应用程序中使用 ES,我需要执行一个仅包含过滤器而没有“文本搜索”的搜索查询,但我不确定如何编写它。

我必须使用 match_all 例如:

$query = [
   'filtered' => [
   'query' => [
       'match_all' => []
    ],
      'filter'=> [
         'bool' => [
            'must' => [
               [ 'range' => [
                  'price' => [
                     'lte' => 9000
                  ]
               ]
               ],
            ],
         ]
      ],
   ],
];

或者像这样:

$query = [
   'filtered' => [
      'filter'=> [
         'bool' => [
            'must' => [
               [ 'range' => [
                  'price' => [
                     'lte' => 9000
                  ]
               ]
               ],
            ],
         ]
      ],
   ],
];

我想要的是仅使用过滤的 bool 查询而不使用文本搜索。

最佳答案

事实上,如果您未在过滤查询中指定 query 部分,则默认使用 match_all 查询。引用 doc :

If a query is not specified, it defaults to the match_all query. This means that the filtered query can be used to wrap just a filter, so that it can be used wherever a query is expected.

您的第二个查询应该完成这项工作:过滤器必须包装在要使用的 filtered ( doc ) 或 constant_score ( doc ) 查询中。

如果评分部分对您没有用,您可以坚持使用过滤查询。

最后一件事:您不必将过滤器嵌套在 bool 过滤器中,除非您想将其与其他过滤器组合。在您的演示案例中,您可以直接编写:

$query = [
   'filtered' => [
      'filter'=> [
         'range' => [
             'price' => [
                'lte' => 9000
             ]
          ]
      ]
   ]
];

希望这会有所帮助:)

关于php - 在elasticsearch中是否可以只使用过滤器而不使用文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989479/

相关文章:

php - 从 2 个表获取数据并输入 php 中的第三个表的代码

mysql - 尝试创建复杂 SQL 查询的新手 SQL 用户

laravel - 数据库 Laravel php artisan migrate 连接被拒绝

php - Laravel guzzlehttp - 如何检查主机是否在线?

php - 如何使用 Phalcon ORM 删除结果集

php - 如何在 php 中从数据库中设置选定的值标记 <select> html?

php - 有用的 PHP 数据库类

mysql - 在很长一段时间内汇总分类帐。 (对账、快照、滚动总和?)

php - 为什么将字符串中的加号替换为空格

php - 我可以在 Agile Toolkit 中创建带有子菜单的菜单吗?