我正在尝试使用elasticsearch一次查找多个术语。
更具体地说,当用户输入“quake 2”这样的搜索词时,我希望elasticsearch能够匹配“quake 2”和“quake ii”。这样如果游戏以罗马数字存储在系统中,它的结果就会匹配。
我将使用 PHP 来检测搜索词中是否存在整数,然后生成包含罗马数字的对应词,这应该是直接的,所以我并没有寻求这方面的帮助。
当需要使用elasticsearch同时查找两个字符串时,我遇到了困难。
这是我尝试过的示例:
$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”时,我完全没有得到任何结果?事实上,我已经确定,似乎是标题和数字之间包含空格导致 Elasticsearch 失败。
$json = '{
"query" : {
"terms" : {
"title" : [ "quake 2", "quake ii" ],
"minimum_should_match" : 1
}
}
}
}';
如果“术语”查询中不允许使用空格,那么我应该如何执行此类搜索?
最佳答案
将查询分成两个。使用 bool 查询应该条件和匹配查询以获得适当的结果。 匹配查询之所以有效,是因为匹配查询是由 ES 重新分析和构造的。
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "quake 2"
}
},
{
"match": {
"title": "quake ii"
}
}
]
}
}
}
我试过了..它有效.. 希望它有帮助..!
关于php - 如何使用elasticsearch一次搜索2个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511409/