考虑这是我的映射和设置
$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'
]
]
]
]
]
];
最佳答案
您正在使用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'
]
]
]
]
]
];
关于php - 不区分大小写的搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672556/