【问题标题】:Elastic search 2.3 wildcard query not returning results for exact match弹性搜索 2.3 通配符查询不返回完全匹配的结果
【发布时间】:2016-09-19 16:19:35
【问题描述】:

我想通过elasticsearch 2.3 使用其官方PHP 客户端来使用通配符搜索。

我遇到了这样的问题:

案例 1. 当我搜索词 wood 时,它会返回包含 woodman、hollywood 和 hollywoodbolly 的词。

案例 2。但是当我搜索 hollywood 时,它不会返回其中包含 hollywood 的单词。

但是,在这样的查询字符串中完成时一切正常:

"query" => [
            "query_string" => [
                "query" => "*$keyword*",
                "analyze_wildcard" => true,
                "fields" => $fields
            ]
        ],

但是当像下面这样使用时,案例 2 不起作用:

"query" => [
            "bool" => [
                "must" => [
                    [
                        "wildcard" => [
                            'name' => "*$keyword*",
                        ]
                    ],
                    [
                        "nested" => [
                            "path" => "address",
                            "score_mode" => "max",
                            "query" => [
                                "bool" => [
                                    "must" => [..match[] parameters..]
                                ]
                            ]
                        ]
                    ]
                ]
            ]

我不确定我做错了什么。请帮忙。

编辑:

注意:我已将该字段设置为未分析。

我的查询在搜索 card 时返回 cardboard,但在搜索 cardboard 时未返回 cardboard p>

谢谢。

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    Elasticsearch 仅在 not_analyzed 字段上支持 wildcard queries

    因此,如果您想使用通配符功能,您可以在 query_string 对象下使用它,或者将该字段的映射更改为 index: not_analyzed,然后您就可以进行通配符搜索。

    【讨论】:

    • 我已将该字段设置为 not_analysed 'name' => [ "type" => "string", "index" => "not_analyzed", ] 但仍然无法做到。
    • 我的查询在搜索 card 时返回 cardboard 但在搜索 cardboardcardboard /b> .
    • 您确定该字段映射为not_analyzed?检查/_mapping 端点以确保。我刚刚对其进行了测试,当字段具有name: "cardboard' 时,我可以使用通配符查询搜索*cardboard*,并返回正确的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多