2.3通配符查询不返回精确匹配的结果


Elastic search 2.3 wildcard query not returning results for exact match

我想使用通配符搜索使用弹性搜索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..]
                                ]
                            ]
                        ]
                    ]
                ]
            ]

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

编辑:

注意:我已将该字段设置为not_analyzed

我的查询在搜索card时返回cardboard,但在搜索cardboard时不返回cardboard

谢谢。

Elasticsearch只支持对not_analyzed字段的通配符查询

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