Php 不区分大小写的搜索不起作用
考虑到这是我的映射和设置Php 不区分大小写的搜索不起作用,php,
elasticsearch,Php,
elasticsearch,考虑到这是我的映射和设置 $arr = [ 'index' => 'test1', 'body' => [ 'settings' => [ 'analysis' => [ 'analyzer' => [ 'name_analyzer' => [
$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”时,我会在结果中同时得到两个文档 所以我的问题是,即使我已经设置了分析器,为什么我的搜索不区分大小写 我的搜索查询
$query['index'] = 'test1';
$query['type'] = 'info';
$query['body'] = [
'query'=> [
'bool' => [
'should' => [
[
'prefix' => [
'Name' => 'a'
]
]
]
]
]
];
正如文档所说,您使用的是一个,在查询时不会分析前缀。这意味着,如果将A
作为前缀,它将不匹配任何内容,因为Name
字段被小写
因此,如果您想继续使用前缀查询,我建议您手动将前缀小写
如果这不是一个选项,则可以使用带有通配符的,如下所示:
$query['index'] = 'test1';
$query['type'] = 'info';
$query['body'] = [
'query'=> [
'bool' => [
'should' => [
[
'query_string' => [
'default_field' => 'Name',
'query' => 'A*',
'analyze_wildcard' => 'true'
]
]
]
]
]
];
正如文档所说,您使用的是一个,在查询时不会分析前缀。这意味着,如果将A
作为前缀,它将不匹配任何内容,因为Name
字段被小写
因此,如果您想继续使用前缀查询,我建议您手动将前缀小写
如果这不是一个选项,则可以使用带有通配符的,如下所示:
$query['index'] = 'test1';
$query['type'] = 'info';
$query['body'] = [
'query'=> [
'bool' => [
'should' => [
[
'query_string' => [
'default_field' => 'Name',
'query' => 'A*',
'analyze_wildcard' => 'true'
]
]
]
]
]
];
请出示您的实际代码。如果您发布您的查询,这将很有帮助。有些查询,如术语查询,在查询时不会通过分析器,因此您不会得到任何结果。请显示您的实际代码。如果您发布查询,这将很有帮助。有些查询,如术语查询,在查询时不会通过分析器,因此不会得到任何结果。当然,此查询在结果中为我提供name=abc,但在结果中也需要“abc”。怎么做?前缀为
a
的前缀查询将为您提供name=abc
和name=abc
。而带有A*
或A*
的查询字符串也会给你们两个,我使用的是你们建议的同一个查询,这是我的输出结果{“take”:1,“timed\u out”:false,“\u shards:{“total”:5,“successful”:5,“failed”:0},“hits:{“total”:1,“max\u score”:1,“hits:[{u索引“:”test1“,”u类型“:”info“,”u id“:”1“,”u分数“:”1“,”u来源“:{”姓名“:”abc“,”地址“:”CHembur Mum.81”}]}
我的结果中没有name='Abc'。为什么它不起作用呢?刚刚用两个文档name=Abc和name=Abc创建了你的索引,一切似乎都正常:对不起,我的错误,出于测试目的,我用未分析的name重新创建了映射。对不起,它起作用了。当然,这个查询的结果中有name=Abc,但我的结果中也需要'Abc'。怎么做呢?前缀为a
的前缀查询将同时为您提供name=abc
和name=abc
。带有a*
或a*
的查询字符串也将为您提供这两个前缀。我正在使用您建议的相同查询,这是我的输出结果{“take”:1,“timed\u out”:false,“\u shards”:{“总计”:5,“成功”:5,“失败”:0},“点击次数”:{“总计”:1,“最高分数”:1,“点击次数”:[{“索引”:“测试1”,“类型”:“信息”,“id”:“1”,“分数”:1”,“来源”:{“姓名”:“abc”,“地址”:“CHembur妈妈81”}}}
我没有得到name='Abc'的结果。为什么它不起作用呢?刚刚用两个文档name=Abc和name=Abc创建了索引,似乎一切都正常:对不起,我的错误,出于测试目的,我重新创建了名为未分析的映射。对不起,它起作用了