【问题标题】:Correct params for ElasticSearch with PHP使用 PHP 更正 ElasticSearch 的参数
【发布时间】:2015-10-26 23:11:52
【问题描述】:

我正在尝试使用 ElasticSearch 和 PHP 进行类似 Google 的搜索。我一直在阅读 ElasticSearch 的书,我想我是使用 simple_query_string 查询类型,它可以从搜索框中获取关键字(或短语)并尝试查找所有输入的术语。

我在我的项目中使用 PHP ElasticSearch 库,在连接到我的服务器后,我尝试将 $client->search($params) 传递给我的搜索以返回结果。

我有这个作为我的参数数组

$params =
            [
                'index' => 'letsmeetup',
                'type' => 'person',
                'body' =>
                    [
                       'query' =>
                            [
                                'simple_query_string' =>
                                [
                                    'query' => $keywords,
                                    'fields' => [
                                        "first_name","last_name","bio","username","email_address","interests","skills"
                                    ]
                                ]
                            ]
                    ]
            ];

我使用了“热爱 php 的人”之类的短语,我得到了结果。当我得到正确的结果时,我尝试了“实时网络”(在我的简历中)。

问题是当我尝试“Er”时,知道有一个名字“Erin”或“Neo”,我的简历中有“neo4j”,但它没有返回任何结果。我的 params 数组是否正确?

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    此类查询需要使用通配符

    {
      "query": {
        "query_string": {
          "fields": [ "first_name","last_name","bio","username","email_address","interests","skills"],
          "query": "Er*"
        }
      }
    }
    

    这将匹配“Erin”、“Eric”、“Error”等。 您可以在此处找到有关查询字符串语法和通配符的更多信息。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax

    我希望这会有所帮助!

    【讨论】:

    • 谢谢!我应该替换 simple_query_string 还是可以添加通配符作为后备或附加?
    • 您可以将通配符附加到您的查询中,但您可能会得到更多结果,请注意,请不要使用 *word,因为 ES 必须搜索整个索引
    • 那么什么是获得完整语句搜索加上部分单词结果(例如 Er 或 Neo)的最佳配置?
    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 2019-05-24
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2022-07-05
    相关资源
    最近更新 更多