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

标签 php elasticsearch full-text-search search-engine

我正在尝试使用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/

相关文章:

php - 有效运行多个 Web/PHP 应用程序

elasticsearch - Logstash无效字段引用: `[iso-8859-1]to`

c# - 如何获取我的全文目录中使用的停用词列表?

php - MySQL 代码导致 PHP 脚本在 popen/exec 崩溃

php - 从 Woocommerce 中的子产品类别 ID 获取父产品类别 ID

regex - ElasticSearch 正则表达式过滤器

elasticsearch - 包含特定字段是否可以更改elasticsearch结果集?

sql - 如何在 MySQL 中搜索多个列?

mysql - 使用 CONTAINS 进行 SQL 全文搜索会引发几何错误

php - 困难算法: badge balancing,数学分布