gpt4 book ai didi

php - 如何使用elasticsearch一次搜索2个字符串?

转载 作者:行者123 更新时间:2023-12-02 22:17:47 25 4
gpt4 key购买 nike

我正在尝试使用elasticsearch一次查找多个术语。

更具体地说,当用户输入诸如“地震2”之类的搜索词时,我希望Elasticsearch匹配“地震2”和“地震ii”。这样,如果游戏以罗马数字存储在系统中,则结果与结果匹配。

我将使用PHP来检测搜索项中是否存在整数,然后生成包含罗马数字的副本,这应该很简单,因此我没有在寻求帮助。

这是当我使用 flex 搜索在砖墙上一次查找两个字符串的时候。

这是我尝试过的示例:

$json = '{
"query" : {
"terms" : {
"title" : [ "quake", "crysis" ],
"minimum_should_match" : 1
}
}
}
}';
$searchParams['index'] = 'thegamesdb';
$searchParams['type'] = 'game';
$searchParams['body'] = $json;
$elasticResults = $client->search($searchParams);

上面的行为与预期的一样,并返回包含地震和晕轮的结果列表,并且每个列表的Seaach得分均相当合理。

但是,当我尝试使用上述查询同时搜索“quake 2”和“quake ii”时,我没有得到任何成功吗?实际上,我已经确定似乎是标题和数字之间的空格使 flex 搜索失去了。
$json = '{
"query" : {
"terms" : {
"title" : [ "quake 2", "quake ii" ],
"minimum_should_match" : 1
}
}
}
}';

如果“条件”查询中不允许使用空格,那么我应该如何执行这种类型的搜索?

最佳答案

将查询分为两个部分。usebool查询应对查询进行条件匹配,以获取适当的结果。
匹配查询之所以有效,是因为匹配查询是由ES重新分析和构造的。

     {
"query": {
"bool": {
"must": [
{
"match": {
"title": "quake 2"
}
},
{
"match": {
"title": "quake ii"
}
}
]
}
}
}

我试过了..它奏效了..
希望能帮助到你..!

关于php - 如何使用elasticsearch一次搜索2个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com