弹性搜索2.3通配符查询不返回完全匹配的结果

时间:2016-09-19 07:13:46

标签: php elasticsearch

我想使用弹性搜索2.3使用其官方PHP客户端进行通配符搜索。

我面临的问题是:

案例1.当我搜索 wood 这个词时,它会返回有樵夫,好莱坞和好莱坞的单词。

案例2.但是当我搜索好莱坞时,它并没有返回带有好莱坞的字样。

但是,在查询字符串中完成后,一切正常:

"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_analysed。

我的查询在搜索时返回纸板,但在搜索纸板时未返回纸板

感谢。

1 个答案:

答案 0 :(得分:0)

Elasticsearch仅在not_analyzed字段

上支持wildcard queries

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