我想使用通配符搜索使用弹性搜索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
,然后您将能够进行通配符搜索