考虑这是我的映射和设置
$arr = [
'index' => 'test1',
'body' => [
'settings' => [
'analysis' => [
'analyzer' => [
'name_analyzer' => [
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'asciifolding',
'word_delimiter'
]
]
]
]
],
"mappings" => [
"info" => [
"properties" => [
"Name" => [
"type" => "string",
"index" => "analyzed",
"analyzer" => "name_analyzer"
],
"Address" => [
"type" => "string",
"index" => "analyzed",
"analyzer" => "name_analyzer"
]
]
]
]
]
];
指数二后名称&地址为
当我搜索姓名'A'时,我没有得到任何结果文件。
但是当我搜索名称'a'时,我得到结果中的两个文件
所以我的问题是即使我设置了分析器,为什么我的搜索不区分大小写?
我的搜索查询
$query['index'] = 'test1';
$query['type'] = 'info';
$query['body'] = [
'query'=> [
'bool' => [
'should' => [
[
'prefix' => [
'Name' => 'a'
]
]
]
]
]
];
答案 0 :(得分:0)
您正在使用prefix query,正如文档所述,在查询时不会分析前缀。这意味着如果您将A
作为前缀,它将无法匹配任何内容,因为Name
字段正在小写。
因此,如果您想继续使用前缀查询,我建议您手动小写前缀。
如果这不是一个选项,您可以使用带有通配符的query string,如下所示:
$query['index'] = 'test1';
$query['type'] = 'info';
$query['body'] = [
'query'=> [
'bool' => [
'should' => [
[
'query_string' => [
'default_field' => 'Name',
'query' => 'A*',
'analyze_wildcard' => 'true'
]
]
]
]
]
];