当前位置: 首页 > 面试题库 >

ElasticSearch并在PHP中搜索多个字段

危彬彬
2023-03-14
问题内容

我正在使用最新版本的elasticsearch-php以及最新版本的MongoDB和ElasticSearch。

我需要对可以包含一个或多个值的多个字段进行搜索。例:

country_code应为NL,BE或DE,并且类别应包含AA01,BB01,CC02或ZZ11

我以为我会按照以下方式解决它(PHP):

$countries = array(“NL”, “BE”, “DE”);
$category = array(“AA01”, “BB01”, “CC02”, “ZZ11”);

$searchParams['body']['query']['bool']['must']['terms']['country'] = $countries;
$searchParams['body']['query']['bool']['must']['terms']['categories'] = $category;
$searchParams['body']['query']['bool']['must']['terms']['minimum_should_match'] = 1;

但是结果甚至还不能接近我期望返回的数据。

有时 $ countries 和/或 $ category 只能有一个元素。


问题答案:

因为PHP数组是如何工作的,您terms每次都覆盖查询,而是尝试以下方法:

array(
    'body' => array('query' => 
    'bool' => array(
        'must' => array(
            array('terms' => array('country' => implode(' ', $countries))),
            array('terms' => array('category' => implode(' ', $category))),
        )
    )
))

minimum_should_match``must查询的with 子句是无用的。



 类似资料:
  • 我有一个endpoint,我正在将它代理到ElasticSearchAPI中,以进行简单的用户搜索。 有关这些参数的一些详细信息如下 所有参数都是可选的 昵称可以作为全文搜索进行搜索(即'myUser'将返回'myUsername') 电子邮件必须完全匹配 名称可以搜索为每个令牌的全文搜索(即'john'将返回'John Smith') ElasticSearch调用应将参数集体视为AND'd。

  • 我需要在我的应用程序中添加搜索栏。搜索将按名和姓进行搜索。我不知道如何编写elastcsearch查询。名字和姓氏是两个分开的字段。我是个新手。 例:名:约翰,姓:约书亚 搜索栏字符串为上层结果:约翰·乔·约翰·乔·约翰·乔·乔·约翰·约书亚·约翰·约书亚·乔...

  • 我正在使用Nest连接到ElasticSearch并执行一些查询。到目前为止,在给定一个通配符查询的情况下,我能够得到我想要的结果,如下所示: 但是现在我需要为某个用例的查询添加附加条件。 我需要的不仅是通过查询,还需要其他两个匹配的字段: 搜索术语"*" field 1="一些字符串" field="一些指南" 我确信在弹性搜索中一定有办法做到这一点(使用Nest),但我还没有找到它。 我知道我

  • 问题内容: 我第一次使用Postgresql,并且试图在我的网站中创建一个搜索引擎。我有这张桌子: 然后我为表的每个字段创建了一个索引(这是正确的方法吗?或者我可以为所有字段创建一个索引?): 现在,如果我想在每个索引中搜索一个单词,SQL查询是什么? 我尝试了这个,它的工作原理: 是否存在更好的方法来做到这一点?我可以搜索多个吗?我的一个朋友提出了一个解决方案,但这是针对MySQL数据库的: P

  • 问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,

  • 我有以下的请求给管理员和管理员 我想用上面Dto中不为空的字段搜索用户存储库。 示例:如果firstName是“john”,lastName是“smith”,其余字段为空,那么我必须在存储库中搜索firstName是“john”,lastName是“smith”的所有记录(不是或) 我还必须为响应执行分页 我是Spring靴新手,有人能建议我怎么做吗?